2013-08-30 142 views
1

我有一個像分割使用多個分隔符在Java中的字符串

String myString = "hello world~~hello~~world" 

字符串我使用的分割方法是這樣

String[] temp = myString.split("~|~~|~~~"); 

我想要的陣列溫度只包含隔開的字符串〜,~~或~~~。

但是,因此創建的臨時數組的長度爲5,另外2個「字符串」爲空字符串。

我希望它只包含我的非空字符串。請幫忙。謝謝!

+0

請格式化您的代碼與相應的標記爲了可讀性:http://stackoverflow.com/editing-help#code –

+0

對不起,我會關注:) –

回答

8

你應該用的量詞與你的性格:

String[] temp = myString.split("~+"); 

String#split()需要一個正則表達式。 ~+將匹配1個或多個~,因此它將分割爲~~~~~~等等。

String[] temp = myString.split("~{1,3}"); 

另外,如果只是要分割上~~~,或~~~,則可以通過使用{m,n}量詞,它匹配從Ñ倍的圖案限制重複


當您按照自己的方式拆分它時,它將在~上拆分a~~b兩次,因此中間元素將爲空字符串。

你可能也通過反轉您的分隔符的順序是這樣解決了這個問題:

String[] temp = myString.split("~~~|~~|~"); 

這將首先嚐試拆就~~,分裂之前~和做工精細。但是你應該使用第一種方法。

+0

問題是他想用'~~~~ '也是...... – Betlista

+2

@Betlista'+'是一個正則表達式量詞,意思是匹配先驗標記1或*多*次。這意味着它也會覆蓋'~~~~~~~~~~~'':-) – HamZa

+0

我確切地知道'+'是什麼意思,但他要求「......只包含由〜,~~或~~~「,所以也許'」〜{1,3}「'更好 – Betlista

4

只需轉動模式圍:

String myString = "hello world~~hello~~world"; 
    String[] temp = myString.split("~~~|~~|~"); 
+0

+1用於計算OP實際要求的內容。 –

3

試試這個:

myString.split("~~~|~~|~"); 

它肯定會工作。在你的代碼中,實際上第一次發生~時會發生什麼,它將作爲第一個分隔符並從該點開始拆分字符串。所以它不會在您的字符串中的任何地方得到~~~~~,儘管它在那裏。像:

[hello world]~[]~[hello]~[]~[world] 

方括號被分成5個不同的字符串值。

相關問題