2016-04-26 23 views
3

我知道如何2種不同類型的字符串之間提取字符串,例如[和],或(等之間的串...提取物)進行同一性質的2個字符

但我不知道是如何獲得1個字符之間的多個/所有字符串。 如:

the *big* brown fox *jumps over* the *lazy* **dog** 

它應該返回 「*」:

big 
jumps over 
lazy 

,它也應該返回 「**」:

dog 

的所有庫,正則表達式模式和這樣的不支持這種功能。

+2

在循環中的提取方法,使用'indexOf'和'substring' –

+1

創建自己的方法,尊重你的條件,並建立與StringBuilder的你的輸出字符串 – Ricardo

+0

你需要像「(\ * \ w + \ * *)」和「(\ * \ * \ w + \ * * *)」這樣的組匹配正則表達式「請參閱http://stackoverflow.com/questions/5508965/java-regexp -group-capturing – kofemann

回答

5

此正則表達式:

[\*]+([a-z ]*)[\*]+ 

將匹配你在找什麼。見this

  • [\*]+最後匹配1個或多個* s。
  • ([a-z ]*)匹配a-z和空格之間的字符,並返回該字符。

現在,因爲安迪·特納指出,這也符合在*dog*********dog,你可以這樣做:

[\*]{1,2}([a-z ]*)[\*]{1,2} 

這將1和2之間的匹配* s(參照this)可以改變,要任何範圍,但請注意{1,3}將匹配1,2或3次,而不僅僅是1次和3次。

+2

這不起作用 - 它不匹配相同的開始和結束。例如,它會匹配'* dog **********'(和'** dog **'它會匹配'**'和'**')。 –

+1

@AndyTurner你是對的。但那不是要求。是嗎? – Hackerdarshi

+0

@AndyTurner編號爲'**狗**'。它會匹配'狗'看到鏈接? – Hackerdarshi

0
String str="the *big* brown fox *jumps over* the *lazy* **dog**"  
str = str.replace("**", "*"); 

,然後執行你使用

+0

下來選民!請原因? – user6218508

+0

有一個更優雅的方式來解決它(與正則表達式),但這是沒有錯的,不應該被低估。 –

0
String test = "the *big* brown fox *jumps over* the *lazy* **dog**"; 

StringTokenizer st = new StringTokenizer(test,"*"); 

while (st.hasMoreTokens()) { 
    System.out.println(st.nextToken()); 
}