Rechenzeichen als regex

Hallo,

ich bin ein Java-Neuling und versuche mich gerade an einem "Taschenrechner".
Meine Idee wäre, dass der User einen Term eingeben kann, das Programm die Eingabe über

String[] listeZahlen = eingabe.split("+|-|*|/|", 0);
String[] listeOperatoren = eingabe.split("1|2|3|4|5|6|7|8|9|0", 0);

in Zahlen und Operatoren trennt, mit denen ich dann später weiterarbeiten kann.
Die Zahlen funktionieren wunderbar als regex (\d hat komischerweise nicht funktioniert deswegen die umständliche | Schreibweise). Bei den Operatoren bekomme ich angezeigt "Dangling metacharakter. Pattern expected".

Mir ist klar, dass Java das + und * als Operatoren wahrnimmt und nicht als bloße Satzzeichen. Habbs schon mit \ und \\ versucht, das klappt aber auch nicht.

Irgendwelche Ideen, wie ich das umgehen kann, oder auch meinen Taschenrechner von grundauf anders angehen?
Ich schreibe in IntelliJ IDEA

Liebe Grüße und danke schon mal
 

VfL_Freak

Top Contributor
Moin,
String[] listeZahlen = eingabe.split("+|-|*|/|", 0);
String[] listeOperatoren = eingabe.split("1|2|3|4|5|6|7|8|9|0", 0);
Vor allem würde ich hier erstmal die Array-Bezeichner überdenken :cool:

Zu den Operatoren:
(a) du musst den Forward-Slash escapen!
(b) außerdem ist IMHO das schließende Pipe-Symbol überflüssig (ob es wirklich stört, kann ich so aus dem Stand nicht sagen)!

Sind in der Eingabe Blanks zu gelassen ??
VG Klaus
 

Robat

Top Contributor
Für Zahlen nimmst du am Besten \\d+
Bei den Operatoren musst du + - * maskieren. Das geht indem du 2 Schrägstriche voran stellst. "\\*|/|\\-|\\+"

Edit:
Grad noch mal getestet. Folgendes liefert die richtige Ausgabe bei mir.
Java:
String input = "22*5/4-7+3";
System.out.println(Arrays.toString(input.split("\\*|/|\\-|\\+") )) ;
System.out.println(Arrays.toString(input.split("\\d+")))  ;
 
Moin,
Vor allem würde ich hier erstmal die Array-Bezeichner überdenken :cool:
Versteh ich nicht... ich geb doch in der 1. Zeile an, welche Zeichen die Zahlen, in der 2. welche die Operatoren voneinander trennen....
(b) außerdem ist IMHO das schließende Pipe-Symbol überflüssig (ob es wirklich stört, kann ich so aus dem Stand nicht sagen)!
Sind in der Eingabe Blanks zu gelassen ??
VG Klaus
Was ist das Pipe-Symbol (sorry.. kompletter Newbie...)
Blanks?

Für Zahlen nimmst du am Besten \\d+
Bei den Operatoren musst du + - * maskieren. Das geht indem du 2 Schrägstriche voran stellst. "\\*|/|\\-|\\+"

Cool danke, das funktioniert!
 

Barista

Top Contributor
Das Pipe-Symbol ist der senkrechte Strich auf der Taste mit dem Grösser-als- und dem Kleiner-als-Zeichen.
|
Also Alt Gr die Taste mit dem Grösser-als- und dem Kleiner-als-Zeichen betätigen.
 

Barista

Top Contributor
Ich muss mal klugscheissern.

Terme/Ausdrücke mit Klammern kannst Du mit Regex nicht in einen Ausdrucks-Baum umwandeln.

Prinzipiell können RegEx nur Zustandsautomaten ohne Stapel abbilden.

Zum Tokenisieren kannst Du Regex aber auch bei geklammerten Termen verwenden.

Ich habe mal gelesen, dass es in Perl (wahrscheinlich auch in anderen Sprachen) Erweiterungen für RegEx geben soll, die rekursives Arbeiten (Stapel) erlauben, habe aber davon keine konkrete Ahnung.
 

Flown

Administrator
Mitarbeiter
Ich würde das mit den Operatoren eher so machen:
Java:
String.format("[%s]", Pattern.quote("*+/-"));
 

VfL_Freak

Top Contributor
Moin,
Mit Arraybezeichner ist sicherlich deine Benennung der Variablen gemeint
richtig ;)

Du nennst es listeZahlen was verwirren könnte, da es in Java Arrays und Listen gibt
So meinte ich nicht :)

String[] listeZahlen = eingabe.split("+|-|*|/|", 0);
String[] listeOperatoren = eingabe.split("1|2|3|4|5|6|7|8|9|0", 0);
Es hatte mich irritiert, dass das Ergebnis der Operatoren "Zahlen" heißt und umgekehrt, aber ich habe übersehen, dass Du ja SPLITTEST, von daher ist die Benennung natürlich doch korrekt :confused:
Ich hatte es wohl als das zu compilende Pattern angesehen, da ich es stets so verwende:
Java:
Pattern p = Pattern.compile( "+|-|*|/" );
String[] data = p.split( eingabe, 0);

Mea culpa :)
VG Klaus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Rechenzeichen bei Termen - Darstellung bei Schleifen Java Basics - Anfänger-Themen 7
S Variablen Rechenzeichen als Variablen in Rechnung einbinden Java Basics - Anfänger-Themen 4
J Variablen Rechenzeichen und Zahlen verknüpfen für einen Taschenrechner Java Basics - Anfänger-Themen 17
W "switch" Anweisung - Rechenzeichen? Java Basics - Anfänger-Themen 5
V StringTokenizer für Rechenzeichen Java Basics - Anfänger-Themen 12
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
B Regex Order unwichtig bei Lookaheads? Java Basics - Anfänger-Themen 7
F RegEx Hilfe Java Basics - Anfänger-Themen 5
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
W RegEx Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
A Zusammengesetzte Nomen/Straßennamen mit Regex-Ausdrücken trennen Java Basics - Anfänger-Themen 8
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
H Java Regex Aufzählung kontrollieren Java Basics - Anfänger-Themen 3
Nooobi Regex und .matches() geben keine Ausnahme Java Basics - Anfänger-Themen 10
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
K Wie verneine ich einen Regex? Java Basics - Anfänger-Themen 2
L Hilfe bei RegEx Java Basics - Anfänger-Themen 4
Dimax RegEx Java Basics - Anfänger-Themen 10
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
O Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht. Java Basics - Anfänger-Themen 9
O Text mit Regex trennen und wieder zusammenbauen Java Basics - Anfänger-Themen 5
L Regex issue Java Basics - Anfänger-Themen 4
B Regex Kombination benötigt Java Basics - Anfänger-Themen 5
strohkolben Regex Java Basics - Anfänger-Themen 3
OnDemand Regex oder Split? Java Basics - Anfänger-Themen 5
I String.split regex Frage Java Basics - Anfänger-Themen 2
C RegEx Problem Java Basics - Anfänger-Themen 4
Dimax RegEx funktionieren nicht Java Basics - Anfänger-Themen 7
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
K substitute mit regex Java Basics - Anfänger-Themen 10
G RegEx Java Basics - Anfänger-Themen 11
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
M Regex zum Integer.parseInt Java Basics - Anfänger-Themen 4
G Regex Java Basics - Anfänger-Themen 4
M Regex-Ausdruck: Alle Zeichen bis auf ein bestimmtes erlauben (p{L}) Java Basics - Anfänger-Themen 5
M Regex anpassen Java Basics - Anfänger-Themen 19
C Regex-Problem Java Basics - Anfänger-Themen 4
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
C Positive und negative Zahlen mit Regex extrahieren Java Basics - Anfänger-Themen 8
F RegEx für Email Java Basics - Anfänger-Themen 2
F RegEx "+" nur als Zeichen, nicht als Operator oder Sonstiges Java Basics - Anfänger-Themen 2
FelixN RegEx aus einem String als String-Array zurückgeben Java Basics - Anfänger-Themen 8
FelixN RegEx Erläuterung "ˆ[ˆa-zA-Z]+$" Java Basics - Anfänger-Themen 6
F Regex Hilfe Java Basics - Anfänger-Themen 3
I Regex findet keine Treffer Java Basics - Anfänger-Themen 4
C Regex Java Basics - Anfänger-Themen 2
C Probleme bei Regex Java Basics - Anfänger-Themen 9
B Regex ignorieren von Groß - Kleinschreibung Java Basics - Anfänger-Themen 1
F Regex für Inlineformatierungen Java Basics - Anfänger-Themen 12
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
O Regex Java Basics - Anfänger-Themen 2
F Switch Case Problem mit Regex lösen? Java Basics - Anfänger-Themen 6
H regex-Problem Java Basics - Anfänger-Themen 2
F Ist das ein korrekter Regex-Ausdruck? Java Basics - Anfänger-Themen 12
M Zahlenbereich mit RegEx Java Basics - Anfänger-Themen 3
B Hilfe bei Regex - Erstellung Java Basics - Anfänger-Themen 5
D regex Aufbau Frage Java Basics - Anfänger-Themen 4
W RegEx Matcher + Pattern und Emails Java Basics - Anfänger-Themen 8
S Ich verstehe die RegEx Tabelle von Javadoc nicht so ganz Java Basics - Anfänger-Themen 3
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
F RegEx Problem Java Basics - Anfänger-Themen 8
F Regex Hilfe Java Basics - Anfänger-Themen 14
G String nach Contains/Regex Java Basics - Anfänger-Themen 2
U RegEx alle Kommas bei den Zahlen in Punkt umwandeln Java Basics - Anfänger-Themen 3
K RegEx - Multiple Line Java Basics - Anfänger-Themen 3
S Regex Pattern Java Basics - Anfänger-Themen 3
K Regex: illegal character range Java Basics - Anfänger-Themen 4
F RegEX Hilfe Java Basics - Anfänger-Themen 8
U Regex für kommaseparierte Zahlen Java Basics - Anfänger-Themen 1
K Operatoren Regex für 10er Zahlen Java Basics - Anfänger-Themen 8
V Java Regex richtig parsen Java Basics - Anfänger-Themen 2
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
N mein RegEx Java Basics - Anfänger-Themen 2
C Lösung für RegEx in Java gesucht Java Basics - Anfänger-Themen 2
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern Java Basics - Anfänger-Themen 2
M Regex/matcher Java Basics - Anfänger-Themen 2
T Methoden String.matches() - Regex Java Basics - Anfänger-Themen 2
truesoul Regex für www Java Basics - Anfänger-Themen 0
N Methoden Straßennamen und Hausnummer - RegEx Java Basics - Anfänger-Themen 19
W Erste Schritte Regex negieren Java Basics - Anfänger-Themen 3
W String match mit Wildcard ODER Regex Java Basics - Anfänger-Themen 1
E useDelimiter-Anwednung / Regex Java Basics - Anfänger-Themen 2
C java regex Java Basics - Anfänger-Themen 2
C Regex zum matchen ausserhalb von Tags Java Basics - Anfänger-Themen 3
O Regex zwischenspeichern Java Basics - Anfänger-Themen 6
O Regex Java Basics - Anfänger-Themen 5
R Einfacher Regex Java Basics - Anfänger-Themen 3
V RegEx Java Basics - Anfänger-Themen 15
HoloYoitsu Datentypen replaceAll() mit regex? Java Basics - Anfänger-Themen 5
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
G verwendung von regex Java Basics - Anfänger-Themen 3
X Regex splitten Java Basics - Anfänger-Themen 5
T Regex Problem Java Basics - Anfänger-Themen 4
B String nach regex überprüfen Java Basics - Anfänger-Themen 6
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
N Regex Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben