2016-09-29 160 views
0

我想分割的字符串如下所示。如何在java中分割字符串?

String text = " *Some text* *Another text* *Yet another text*  **last text**"; 

我需要拆分上面的字符串,以便我可以得到像下面這樣的數組。

String[] array = {"Some text", "Another text", "Yet another text", "last text"} 

如果你注意到,前三個文本有星號(*)在他們身邊,而最後一個周圍有兩個星號。

此外,文本之間可以有空格,例如。 *Some text*

會有不文本和*

例如之間的任何空間*Text* - will happen

* some text * - will not happen 

誰能幫助,因爲我不知道正則表達式的那麼多。

+0

那麼,會不會有'String text =「* Some \\ * text *」'?或者'String text =「* .Some text。*」'?只是爲了確認:界限是'space' +'*'+'non-space' ...'non-space' +'*'+'space' –

+0

@WiktorStribiżew單個星號將圍繞每個文本。雙星號將僅包圍最後一個文本。文本或任何其他特殊字符之間不會有其他星號。文本的數量可以像一兩個不同。在這種情況下,最後一段文字總是有兩個星號。 – ashishjmeshram

+0

爲什麼downvote? – ashishjmeshram

回答

1

以下是你的問題推導出的規格和評論:

  • 初始*應遵循的字字符(字母/數字/下劃線)
  • 尾隨*應該用字字符
  • 前面非字字符後星號或字符串和befo開始 -

您可以使用單純的"\\B\\*\\b([^*]+)\\b\\*\\B"模式斷言星號(\\B\\*\\b的預期位置再一個字字符,並\\b\\*\\B - 串的非字字符/結束一個字字符之前和之後的星號),和抓住1個或多個字符比*其它成組1.

String s = " *Some text* *Another text* *Yet another text*  **last text**"; 
Pattern pattern = Pattern.compile("\\B\\*\\b([^*]+)\\b\\*\\B"); 
Matcher matcher = pattern.matcher(s); 
while (matcher.find()){ 
    System.out.println(matcher.group(1)); 
} 

一個更復雜的變化,以僅檢查星號隨後/之前或不與空格(start|space + * + non-space + any_chars_not_parens + non-space + * + space|end)可以是

"(?<!\\S)\\*(?!\\s)([^*]+)(?<!\\s)\\*(?!\\S)" 

參見another Java demo