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

... komplette Frage anzeigen

1 Antwort

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! :)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von hajfdbdsfbiaf
07.12.2015, 15:06

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

1

Was möchtest Du wissen?