Im Rahmen eines Schulprojekts muss ich eine Zeichenfolge aus dem Formular ersetzen:
5 * x^3 - 6 * x^1 + 1
zu so etwas wie:
5x<sup>3</sup> - 6x<sup>1</sup> + 1
Ich glaube, dass dies mit regulären Ausdrücken möglich ist, aber ich weiß noch nicht, wie ich es machen soll.
Kannst du mir helfen?
PS Die eigentliche Aufgabe besteht darin, eine Java-Anwendung für die Polynomverarbeitung zu implementieren. Ich verwende diese Aufgabe, um polynomial.toString () vom Modell an die Ansicht zu übergeben, und ich möchte sie auf hübsche Weise mithilfe von HTML-Tags anzeigen.
Antworten:
quelle
quelle
replaceAll
Methode implizit tutPattern.compile(regex).matcher(testString).replaceAll(regexReplacementString)
! Wenn Sie das Muster auf diese Weise wiederverwenden, werden redundante Objekte vermieden. Wie @MarcelValdezOrozco sagt, verhindert das statische Festlegen unnötige Aufrufe der Musterkompilierung. :)quelle
quelle
Bitte beachten Sie, dass das Zusammenfügen beider Ersetzungen zu einem einzigen regulären Ausdruck / Ersatz eine schlechte Wahl wäre, da allgemeinere Ausdrücke wie z. B.
x^3 - 6 * x
fehlschlagen würden.quelle
Wenn dies für einen allgemeinen mathematischen Ausdruck gilt und Klammerausdrücke zulässig sind, ist es sehr schwierig (möglicherweise unmöglich), dies mit regulären Ausdrücken zu tun.
Wenn die einzigen Ersetzungen die sind, die Sie gezeigt haben, ist es nicht so schwer zu tun. Zuerst Strip-Outs
*
, dann Capturing verwenden, wie Can Berk Güder gezeigt hat, um mit den Ss umzugehen^
.quelle
Was ist dein Polynom? Wenn Sie es "verarbeiten", stelle ich mir vor, dass irgendwann eine Art Baum von Unterausdrücken generiert wird, und würde denken, dass es viel einfacher wäre, dies zum Generieren Ihrer Zeichenfolge zu verwenden, als das Raw erneut zu analysieren Ausdruck mit einem regulären Ausdruck.
Wirf einfach eine andere Denkweise da draußen. Ich bin mir nicht sicher, was sonst noch in Ihrer App los ist.
quelle
Versuche dies:
Stellen Sie sicher, dass Sie java.util.regex importieren.
quelle
quelle
Sie sollten sich mit der Erfassung in Regex befassen, um das Umbrechen der 3 in ^ 3 zu handhaben.
quelle
Versuchen Sie dies, möglicherweise nicht der beste Weg. Aber es funktioniert
quelle
Schauen Sie sich antlr4 an. Sie werden beim Erstellen einer Baumstruktur viel weiter kommen als bei regulären Ausdrücken allein.
https://github.com/antlr/grammars-v4/tree/master/calculator (calculator.g4 enthält die Grammatik, die Sie benötigen)
Kurz gesagt, Sie definieren die Grammatik, um einen Ausdruck zu analysieren, verwenden antlr, um Java-Code zu generieren, und fügen Rückrufe hinzu, um die Auswertung beim Erstellen des Baums durchzuführen.
quelle