2016-04-26 8 views
3

Ich verstehe, wie eine Schnur zwischen zwei verschiedenen Arten von Strings zu extrahieren wie [und] oder(), etc ...Extrahieren Sie eine Zeichenfolge zwischen zwei Zeichen des gleichen Zeichens

Aber was ich weiß nicht, ist, wie man mehrere/alle Zeichenketten zwischen 1 Zeichen bekommt. ZB:

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

es für "*" zurückgeben sollte:

big 
jumps over 
lazy 

und es sollte auch als Gegenleistung für "**":

dog 

Alle Bibliotheken, regex Muster und solche eine solche Funktion nicht unterstützen.

+2

Innerhalb einer Schleife wurden, verwenden Sie 'indexOf' und' substring' –

+1

Ihre eigene Methode erstellen, die Ihre Bedingungen eingehalten werden und die Ausgabe Strings mit Stringbuilder bauen – Ricardo

+0

Sie müssen regexp mit einer Gruppe wie "(\ * \ w + \ *)" und "(\ * \ * \ w + \ * \ *)" übereinstimmen. Siehe http://stackoverflow.com/questions/5508965/java-regexp -group-capturen – kofemann

Antwort

5

Diese Regex:

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

wird dem entsprechen, was Sie suchen. Siehe this.

  • [\*]+ am Ende übereinstimmt 1 oder mehr * s.
  • ([a-z ]*) passt die Zeichen zwischen a-z und dem Leerzeichen an und gibt das zurück.

Da nun Andy Turner weist darauf hin, dass es passt auch dog in *dog*********, können Sie tun:

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

Diese * s zwischen 1 und 2 (this sehen) entsprechen würden Sie das ändern können jeden Bereich, aber beachten Sie, dass {1,3} wird 1,2 oder 3 mal, und nicht nur 1 und 3 mal übereinstimmen.

+2

Das funktioniert nicht ganz - es passt nicht zum selben Start und Ende. Zum Beispiel würde es '* Hund **********' entsprechen (und für '** Hund **' würde es '**' und '**' zusammenbringen). –

+1

@AndyTurner Sie haben Recht. Aber das war keine Voraussetzung. War es? – Hackerdarshi

+0

@AndyTurner Nr. Für '** Hund **'. Es würde "Hund" entsprechen. Den Link gesehen? – Hackerdarshi

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

und dann das Extraktionsverfahren führen Sie

+0

down voter! Der Grund bitte? – user6218508

+0

Es gibt eine elegantere Lösung (mit regulären Ausdrücken), aber das ist nicht falsch und sollte nicht abgelehnt werden. –

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()); 
} 
Verwandte Themen