2016-06-20 4 views
-1

Sagen wir, ich habe eine Zeichenfolge: "(2 * 32) + 5^2"Java String.split() - Unterteilen einer Zeichenfolge mit // s + erfasst keine Klammern als separate Elemente?

Ich möchte diese in ein String-Array drehen: [(2, *, 32,), + , 5, ^, 2]

dh ich möchte keine Leerzeichen in der ursprünglichen Zeichenfolge erfassen und möchte sie durch Leerzeichen teilen.

Also versuchte ich string.split ** ("\\ s +") ** aber das Ergebnis sieht wie [(2, *, 32), +, 5, ^, 2].

Kann jemand erklären, warum es nicht gespalten „(2“ in (2? Thank you!

+2

, weil es keine Leerzeichen zwischen '(' und '2' ... – njzk2

+0

' \\ s + 'stellt eine 1+ Sequenz von Leerzeichen. Offensichtlich '(2' hat keine Leerzeichen darin. – Mena

+0

In Ihrer erwarteten Ausgabe ignorieren Sie das '*' ist das gewünscht? Ich würde vorschlagen, jedes Zeichen in der Zeichenfolge zu gehen und es zu Ihrem Array hinzuzufügen, wenn es kein a ist whitespace – buczek

Antwort

1

Das funktioniert, und hat den zusätzlichen Vorteil, nicht Spaltung, wenn es Zahlen mehr als 1 Stelle, und ohne eigene Zwischenräume zwischen Tokens

String str = "(2*32) + 5^2"; 
String[] tokens = str.replace(" ", "").split("\\b|(?=\\D)"); 

Ausgang:.

[ (, 2, *, 32,), +, 5, ^, 2 ]

Ideone Demo

+0

Das ist was ich benötigt, danke! Stört es Sie zu erklären, wie Sie mit diesem Muster "\\ b | (? = \\ D)"/auf eine Ressource zeigen? Newbie und ich möchte lernen. – ERohan

+1

@ERohan Erster Zeiger: Lesen Sie das Javadoc von ['Pattern'] (https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html), um die verschiedenen unterstützten Regex-Muster zu lernen. Muster bedeutet: Split an einer Wortgrenze oder wenn das nächste Zeichen keine Ziffer ist. Vorbehalt: Spaltet das Minuszeichen einer negativen Zahl ab und teilt Dezimalpunkte, z. "-3.14" wird zu "[-, 3,., 14]", also müssen Sie diese wieder zusammensetzen. – Andreas

+1

@Ironcache Ein Negativ kann nicht richtig behandelt werden, da es bei der Subtraktion eine Mehrdeutigkeit geben wird. Sprachparser aus dem echten Leben behandeln negative Zahlen oft als positive Zahlen und verwenden den unären Minus-Operator, um danach zu negieren. – 4castle

Verwandte Themen