2012-12-11 34 views
7

我读信息的长线从长相酷似这样一个文本文件:阅读单行文本文件,拆分到阵列

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)); 
+0

是否使用'line.split( “\\\\”);'或者是一个错字?我认为你需要'线。split(“\\\”);' – NickD

+1

@NickD它需要一个正则表达式,所以你需要''\\\\''首先变成一个文字字符串''''''然后一个正则表达式''' \''。 '“\\\”'不会编译,因为它是未终止的字符串文字。 – Esailija

+0

这不是一个错字,因为如果我想分割\\我必须使用\\\\不是我吗? – user1895293

回答

9

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

而是执行此操作:"\\\\\\\\"

+0

我的想法确切.... –

+0

非常感谢:)我永远不会发现我自己:p – user1895293

0

我会比尼克走得更远:

line.split("\\\");

此视图假设您正试图在出现双反斜杠的每个点处拆分该行 - 它看起来像您的代码在每个备用双斜杠处分裂,这将解释每个名称之间的双逗号;因此,在每个拆分部分之间(即逗号之间的每个部分,有两个条目而不是一个,因此一个条目仅仅是逗号)。看看这是否行得通 - 祝你好运!

M.

+0

java中的“\\”实际上是单斜杠,对于正则表达式,这是一个转义字符,因此“\\\\ “表示正则表达式中的单斜杠 – hoaz

3

只是为了好玩,除了何塞·罗伯托的解决方案,你也可以使用一些替代表达式(和许多其他):

两个连续的反斜杠(同样,在何塞的,但使用量词) :

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

两个连续的非单词字符:

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

个两个连续的标点字符:

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

他们都产生所需的输出。

对于Java的正则表达式的更多信息: