Frage von hajfdbdsfbiaf, 13

Wie sieht ein regulärer Ausdruck in Java aus, der ein Minus erkennt, das nicht am Anfang eines Ausdruckes steht?

Hallo, ich schreibe zur Zeit aus Langeweile eine kleine Taschenrechner-Anwendung, bei der ich im Rechenstring erst alle "-" in "+-" mittels replace ersetzte, damit ich alle Summanden per split aufteilen kann. Problematisch ist allerdings, dass ein vorgestelltes minus auch ersetzt wird (z.B. wird "-2+4" zu "+-2+4"). Die String-Klasse bietet mit replaceAll ja eine Methode an, der man eine regulären Ausdruck übergeben kann, und ich denke, das wäre die beste Lösung für mein Problem. Ich finde aber keinen funktionierenden Ausdruck, der jedes Minus, sofern es nicht am Anfang steht, ersetzt. Ich hoffe, jemand hier kann mir weiterhelfen.

Antwort
von TeeTier, 13

Nimm doch ein negatives Lookahead:

String text = "-2 + 4 - +8 + -3 - 5 - -6 * +4 / -3";
text = text.replaceAll("\\s+", "");

if (text.matches("^.*?[*/+-]{3,}.*?$")) {
throw new RuntimeException("Oops!");
}

String regex = "(?<!^|[/*+-])[+/*+-]";
System.out.println(text.replaceAll(regex, " [$0] "));

Im ersten Schritt werden alle Leerzeichen entfernt, und im zweiten Schritt gibt es eine kurze Plausibilitätsprüfung, im dritten Schritt werden die Rechenzeichen durch Ersetzung mit Referenz hervorgehoben, die KEINE Vorzeichen sind.

Deshalb erhalten wir als Ausgabe Folgendes:

-2 [+] 4 [-] +8 [+] -3 [-] 5 [-] -6 [*] +4 [/] -3

Wie du siehst, befinden sich jetzt nur noch die Rechenzeichen in eckigen Klammern.

Naja, wie auch immer ... ich würde einen komplett anderen Ansatz wählen, habe jetzt aber auch keine Zeit mehr dafür. Am besten, du guckst dir erst nochmal ein oder zwei RegEx Tutorials an, damit die Grundlagen sitzen! :)

Viel Spaß mit deinem Rechenprogramm! :)

Kommentar von hajfdbdsfbiaf ,

Vielen Dank für die Mühe, damit funktioniert es. ;)

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten