【问题标题】:Read one-line text file, split to array读取一行文本文件,拆分为数组
【发布时间】:2012-11-29 06:29:52
【问题描述】:

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

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

应该是用户名的高分。当我打印出该行时,它看起来完全一样,但是当我使用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));

【问题讨论】:

  • 您使用的是line.split("\\\\"); 还是拼写错误?我想你需要line.split("\\\");
  • @NickD 它需要一个正则表达式,所以你需要"\\\\",它首先变成一个文字字符串\\,然后是一个文字\的正则表达式。 "\\\" 无法编译,因为它是未终止的字符串文字。
  • 这不是一个错字,因为你必须转义 \ 一次以获得特殊字符,第二次因为它是一个字符串,如果我想拆分 \\ 我必须使用 \\\\ don'我?
  • 您的代码对我来说运行良好。

标签: java arrays file text split


【解决方案1】:

这是因为"\\\\"被解析为\\,而split method使用正则表达式,所以\\变成\,那么Sebastien 5000\\Loic 5000将导致[Sebastien 5000,,Loic 5000]

改为:"\\\\\\\\"

【讨论】:

  • 非常感谢 :) 我永远不会发现自己 :p
【解决方案2】:

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

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

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

两个连续的非单词字符:

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

两个连续的标点字符:

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

它们都产生所需的输出。

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

【讨论】:

    【解决方案3】:

    我会比尼克更进一步:

    line.split("\\\");

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

    M.

    【讨论】:

    • "\\" 在java中实际上是单斜杠,而对于正则表达式,这是一个转义字符,所以“\\\\”表示正则表达式中的单斜杠
    猜你喜欢
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多