2013-08-16 15 views
2
String text="2|919505485043|2013-08-08 12:57:50|2013-08-08 12:58:04|2013-08-08 12:58:08|ANSWER"; 

我想用|。我有java.When我用串分流工作不正常給人錯誤的結果

System.out.println(text.split("|").length); 

上面的字符串分割字符串,我得到的結果82這裏可能是錯誤的。

+0

你期待什麼結果? –

+0

我期待6 – PSR

回答

10

String#split使用正則表達式作爲它的參數。管道字符|具有特殊含義(意思是「或」),以防止字符串在每個字面值|處被內部分割。

應該逃脫

text.split("\\|").length 

否則完整String將確定長度

+0

謝謝你這是工作 – PSR

+0

+1這是一個非常有趣的方式來解決這個問題。直到我讀這篇文章,我才知道。做得好。 –

1

你忘了轉義字符時,可以使用,

text.split("\\\|"); 
7

String.split(String)使用正則表達式,並|在正則表達式中有特殊的含義。

選項:

  • 逃離|手動:text.split("\\|")
  • 逃離|編程:text.split(Pattern.quote("|"))
  • 使用GuavaSplitter類代替,以避免使用正則表達式的所有

我個人會選擇後一種方法 - 我不會這實際上是一個String.split使用正則表達式的設計缺陷,而且在調用代碼時還不清楚。

如果你真的使用String.split,我肯定會用Pattern.quote要清楚任何人閱讀代碼爲什麼你逃避它 - 只要使用"\\|"不是很自我記錄,IMO 。

+0

我喜歡看到添加一個String.split(char seperator)方法來迎合這個相當常見的場景。上帝知道實施會很簡單。我記得在一個很長很醜的ANSI-C代碼行中看到了這一點。男人在哪裏,男人在哪裏,蟲子是多餘的。 – corlettk

1

你應該把\\你忘了這個。

text.split("\\|") 
+0

這個答案不告訴讀者在哪裏放''''' – FDinoff

1
public class Sstring { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String text="2|919505485043|2013-08-08 12:57:50|2013-08-08 12:58:04 |2013-08-08 12:58:08|ANSWER"; 
     System.out.println(text.split("\\|").length); 
     String str[] = text.split("\\|"); 

     for(String i:str){ 
      System.out.println(i); 
     } 
    } 

} 
1

番石榴,像往常一樣!

Splitter.on("|").split("your_text") 

這將返回一個Iterable。

相關問題