Java Regex für lineare Funktion?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Die einfachste Lösung wäre eine Auftrennung der Gleichung, sodass der Nutzer den Faktor von x sowie den Summand separat eingeben muss. Das würde die Prüfung dann auch erleichtern.

Ein regulärer Ausdruck für den obigen Ausdruck könnte hingegen so aussehen:

y=(\-?\d+)x([\+\-]\d+)

Die beiden relevanten Zahlen werden gruppiert, sodass sie nach dem Parsen sogleich aus der Eingabe herausgezogen werden können.

Vor der Prüfung der Eingabe wäre es wohl sinnvoll, Whitespaces aus der Eingabe zu entfernen

input.replaceAll("\\s", "")

denn der obige Ausdruck würde bei dieser validen Eingabe:

y = 5x + 2

sonst scheitern. Deshalb nun an jeder Stelle Whitespaces einzuplanen, halte ich dafür nicht so gut, denn es macht den Ausdruck nur komplizierter.

Im Übrigen wäre auch diese Eingabe invalid:

y=5x+-2

Ich habe den Operator direkt auf ein Zeichen begrenzt, um eine valide Zahl in der zweiten Gruppe aufnehmen zu können. Würde man die Anzahl erlaubter Operatoren auf zwei erhöhen, müsste man wohl diese nachträglich noch einmal speziell parsen oder man findet eine Lösung wie diese:

y=(\-?\d+)x[\+\-]?([\+\-]\d+)

und wertet dann den Operator konkret aus:

int factor = "-".equals(group2) ? -1 : 1;

um ihn später mit n zu multiplizieren.


paulfragtgf 
Beitragsersteller
 25.04.2021, 19:16

Vielen Dank. Ich werde es jetzt auch lieber trennen mit der Eingabe. Mir war klar dass das einfacher wäre, aber wollte es mir nicht zu einfach machen. Hab jetzt aber gemerkt, dass es sonst doch zu viel wird. Nicht einmal zu komplex, aber einfach viel zu viel Code, der fehleranfällig ist. Und das bringt ja nicht einmal einen wirklich nenneswerten Vorteil.

1