2013-10-20 52 views
2

我有這樣的代碼:Java的分割錯誤

String message = receiveMessage(); 
String[] reciv = message.split("|"); 

System.out.println("mess: " + message); 
System.out.println("reciv: " + reciv[0]); 

而這種輸出:

mess: E|NAME 
reciv: 

我看起來有些奇怪,E|NAMEE|NAME*space**space**space**space**space**space**space* ...

我嘗試複製「空間「,我不能。我在想「空間」不是「空間」。

對不起,我是西班牙語。

回答

2

你可以這樣做

String message = receiveMessage(); 
message = message.replaceAll("[\n\r\\s]", ""); 
String[] str1 = message.split("[|]"); 
for (int i = 0; i < str1.length; i++) { 
    System.out.println(str1[i]); 
} 
+0

謝謝!!,你解決了我的問題! :) – Dementor

+0

@Dementor很高興聽到它..不客氣.. – Prabhakaran

+0

爲什麼你不使用修剪? – Dedyshka

7

split使用正則表達式和正則表達式中具有|特殊的意義是左右"|"意味着空字符串""或空字符串""。在空字符串拆分意味着

"ABC" 

將在這些地方分割(我將與|它們標記)

"|A|B|C|" 

生產陣列["", "A", "B", "C", ""]split documentation

尾隨空字符串因此不包括在所得到的陣列中

因此最後一個空白空間被刪除。所以,你在結果,如果你想使它|文字,你需要逃避它使用例如

  • split("\\|")
  • split("[|]")得到現在["", "A", "B", "C"]


  • split(Pattern.quote("|"))
  • split("\\Q|\\E")
+1

+1解釋 –

+0

@Pshemo,Thanks..I不知道[]在Java中的正則表達式。 ..我可以在哪裏讀到這個? – Dedyshka

+1

@Dedyshka'[..]'是[字符類](http://www.regular-expressions.info/charclass.html)。假設你想在'a'和'e'之間找到字符。你可以編寫正則表達式來匹配它們,比如''a | b | c | d | e「'或像'[a-e]'一樣使用類似'[abcde]'的字符類或者使用範圍運算符'-'。請注意,一個字符類可以包含少量字符或字符範圍,它們的順序並不重要,所以它的所有元素在缺省情況下都是用OR運算符分隔的,所以不需要在裏面明確使用'|'。這就是爲什麼它被視爲文字而不是正則表達式元字符。 – Pshemo