假设我有一个文件text.txt在一行中包含以下内容:
abc, def, ghi, jkl
我正在尝试获取文件中的数据列表,因此myList将导致[“abc”,“def”,“ghi”,“jkl”],但它似乎不起作用:
String[] tokens;
try {
Scanner scanner = new Scanner("text.txt");
while (scanner.hasNext()) { tokens = scanner.nextLine().split(","); }
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(tokens.length); // Prints 1 instead of 4
尝试打印索引0-3会产生越界错误(显然因为长度只有1)
然后我想更改其中一个索引(在数组中)中的数据,并将其重写/重写到文件中。 我认为这个答案应该适用于此,但只有在我可以使我的阵列正确之后。 https://stackoverflow.com/a/1016291/4669619
编辑:目前,我知道我的文件只有4个以逗号分隔的内容,如示例文本文件所示。
答案 0 :(得分:3)
你为每一行覆盖tokens
(我认为你有一个空行)
试
String[] tokens;
try {
scanner = new Scanner(new File ("text.txt"));
while (scanner.hasNextLine()) // change this
{
tokens = scanner.nextLine().split(",");
System.out.println(tokens.length);
}
} catch (IOException e) {
e.printStackTrace();
}
答案 1 :(得分:2)
编辑:您没有阅读text.txt
文件。使用new Scanner("text.txt")
您正在使用构造函数Scanner(String source)`,而您想要的是Scanner(File source)
我认为这是您正在寻找的使用ArrayList:
ArrayList<String> tokens = new ArrayList<String>();
try {
File file = new File("text.txt");
Scanner scanner = new Scanner(file);
while (scanner.hasNext()) {
String[] str= scanner.nextLine().split(",");
for(int i=0;i<str.length;i++){
tokens.add(str[i]);
}
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(tokens.size());
答案 2 :(得分:0)
您的代码表明您的循环将一直运行到文件的END,并从文件返回最后一行。你能检查一下你的需要吗?也许你的最后一行不包含&#34;,&#34;。
答案 3 :(得分:0)
感谢有价值的投入人员,但我相信我已经解决了我的问题:
String[] tokens;
try {
Scanner scanner = new Scanner("text.txt");
tokens = scanner.nextLine().split(",");
} catch (IOException e) {
e.printStackTrace();
}
如果我得到一些投票表明我的解决方案确实(其中一个)是正确的,我会选择这个作为正确答案!
答案 4 :(得分:-2)
声明数组时,需要指定其大小。然后,您可以将令牌分配到阵列上的特定位置。
UI
你的问题是你真的不知道你的数组将包含多少元素。所以最好的解决方案是使用String[] myStringArray = new String[3];
myStringArray[0] = "sample string";
ArrayList
尝试将其合并到您的代码中。