首页 > 解决方案 > 具有多个分隔符的拆分和扫描仪

问题描述

我正在尝试创建一个带有分隔符的扫描仪,该分隔符将解析文本文件中的行,然后使用此信息和 split() 方法创建数组。但是,我无法成功阻止 split() 方法应用拆分文本文件的下一行。

public class Main {

public static void main(String[] args) throws FileNotFoundException {
fileReader("test.txt");
}

public static void fileReader(String filename) throws FileNotFoundException {
    Scanner in = new Scanner(new File(filename));
    in.useDelimiter(",");
    String[] test = in.next().split(":");
    String[] test2 = in.next().split(":");
    System.out.println(Arrays.toString(test));
    System.out.println("\n" + Arrays.toString(test2));
}

}

测试.txt

A:B:C,ONE:TWO:THREE
ALPHA:BETA:CHARLIE,FOUR:FIVE:SIX

输出:

[A, B, C]

[ONE, TWO, THREE
ALPHA, BETA, CHARLIE, FOUR, FIVE, SIX]

预期输出:

[A, B, C] [ONE, TWO, THREE]

请注意,我最终将添加一个循环来解析整个文本文件,并使用其他行创建数组。

标签: javasplitdelimiter

解决方案


代替

in.useDelimiter(",");

in.useDelimiter("[," + System.lineSeparator() + "]");

正则表达式[,c]匹配方括号内的字符之一。因此,拆分将发生在此处指操作系统返回的行分隔符的任一位置,c位置。c请注意,不同的操作系统可能会返回不同的行分隔符,因此最好使用System.lineSeparator()而不是自己指定行分隔符。如果您想自己指定行分隔符,您可以指定[,\n\r],但我强烈建议您使用System.lineSeparator()而不是[\n\r].


推荐阅读