7

我正在从一个看起来完全像这样的文本文件中读取一长串信息:

Sebastien 5000\\Loic 5000\\Shubhashisshh 5000\\Thibaullt 5000\\Caroo 5000\\Blabla 5000\\Okayyy 5000\\SebCed 5000\\abusee 5000\\omg 5000\\

它应该是用户名的高分。当我打印出该行时,它看起来完全像它应该的那样,但是当我在 using 之后打印出数组时split("\\\\"),它看起来像这样:

[Sebastien 5000, , Loic 5000, , Shubhashisshh 5000, , Thibaullt 5000, , Caroo 5000, , Blabla 5000, , Okayyy 5000, , SebCed 5000, , abusee 5000, , omg 5000]

问题是这Array[0]很好但是Array[1]是空的,就像Array[3],Array[5]等等一样。

这是我的代码。它出什么问题了?

            BufferedReader in = null;
    try {
        in = new BufferedReader(new FileReader(path));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    String line = null;
    try {
        line = in.readLine();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("LINE = "+line);

    String[] scores = line.split("\\\\");

    System.out.println("Mode = "+mode+Arrays.toString(scores));
4

3 回答 3

9

那是因为"\\\\"is 被解析为\\并且split 方法使用了正则表达式,所以\\become \,然后Sebastien 5000\\Loic 5000会导致[Sebastien 5000,,Loic 5000]

改为这样做:"\\\\\\\\"

于 2012-12-11T16:57:55.963 回答
3

只是为了好玩,除了 José Roberto 解决方案之外,您还可以使用一些替代表达方式(以及许多其他表达方式):

两个连续的反斜杠(与 José 相同,但使用量词):

String[] scores = line.split("\\\\{2}");

两个连续的非单词字符:

String[] scores = line.split("\\W{2}");

两个连续的标点字符:

String[] scores = line.split("\\p{Punct}{2}");

它们都产生所需的输出。

有关 Java 中的正则表达式的更多信息:

于 2012-12-11T17:24:43.270 回答
0

我会比尼克更进一步:

line.split("\\\");

此视图假定您尝试在出现双反斜杠的每个点拆分行 - 似乎您的代码在每个备用双斜杠处拆分,这将解释每个名称之间的双逗号;因此,在每个拆分部分之间(即逗号之间的每个部分,都有两个条目而不是一个,因此一个条目只是一个逗号)。看看这是否有效 - 祝你好运!

M。

于 2012-12-11T17:10:57.640 回答