将逗号分割的文件分割为数组Java,然后重写到该文件

时间:2015-04-27 06:00:14

标签: java list file split

假设我有一个文件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个以逗号分隔的内容,如示例文本文件所示。

5 个答案:

答案 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

尝试将其合并到您的代码中。