2012-12-11 35 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的正則表達式的更多信息: