2016-09-29 4 views
0

Die Zeichenfolge, die ich teilen möchte, ist wie unten angegeben.Wie teile ich die Zeichenfolge in Java?

Ich muss die obige Zeichenfolge aufteilen, damit ich ein Array wie unten erhalten kann.

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

Wenn Sie bemerken, ersten drei Texte haben einzelne Stern (*) um sie herum, während die letzte um es doppeltes Sternchen hat.

Auch Texte können Leerzeichen dazwischen haben, z. *Some text*.

wird es kein Raum zwischen Text sein und *

z.B. *Text* - will happen

* some text * - will not happen 

Kann mir jemand helfen, wie ich bin nicht bewusst, reguläre Ausdrücke, die viel.

+0

Also, wird es 'String Text =" * Einige \ * Text * "'? Oder 'String text =" * .einiger Text. * "'? Nur um zu bestätigen: die Grenzen sind 'Raum' +' * '+' Nicht-Raum' ... 'Nicht-Raum' +' * '+' Raum' –

+0

@ WiktorStribiżew einzelne Sterne umgeben jeden Text. Und doppelte Sterne umgeben nur den letzten Text. Es wird keinen anderen Stern zwischen Texten oder anderen Sonderzeichen geben. Die Anzahl der Texte kann variieren wie eins oder zwei. In diesem Fall hat der letzte Text immer zwei Sterne. – ashishjmeshram

+0

Warum der Downvote? – ashishjmeshram

Antwort

1

Hier sind die Angaben aus Ihrer Frage und Kommentare abgeleitet:

  • Initial * sollte mit einem Wort char (Brief/Ziffer/Unterstrich)
  • Nachgestellte * befolgt werden sollte
  • mit einem Wort char vorangestellt werden

könnten Sie nur "\\B\\*\\b([^*]+)\\b\\*\\B" Muster verwenden, die die erwarteten Positionen der Sterne (\\B\\*\\b behauptet - Stern nach einem nicht-Wort char oder starten Schnur und befo Re ein Wort char und \\b\\*\\B - ein Stern vor einem Nicht-Wort-Zeichen/Ende der Zeichenkette und nach einem Wort char) und 1 oder mehr ergreift andere Zeichen als * in Gruppe 1.er

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)); 
} 

Ein komplexeres Variation nur zu prüfen, ob die Sternchen sind gefolgt/voran- oder nicht mit Leerzeichen (start|space + * + non-space + any_chars_not_parens + non-space + * + space|end)

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

Siehe sein another Java demo

Verwandte Themen