2011-01-11 7 views
2

Ich habe eine Zeichenfolge, sagen wir, "5 + 30" und ich muss es zu Token 5,30, + analysieren. Wie mache ich das? Statt "+" kann es irgendeinen arithmetischen Operator geben? Ich denke, dass reguläre Ausdrücke genügen werden, aber ich bin kein Klotz an ihnen. Vielen Dank für deine Hilfe.Parse Berechnungen Tokens

+0

Haben Ihre Ausdrücke Klammern? – aioobe

+0

http://stackoverflow.com/questions/1320891/java-rpn-reverse-polish-notation-infix-to-postfix und http://stackoverflow.com/questions/4240595/getting-wrong-outputs-in-infix -to-postfix-application-with-java scheint die Infix-zu-Postfix-Konvertierung in Java abzudecken. – dkarp

+0

Nein, werden sie nicht. Nur ein einfacher Taschenrechner. –

Antwort

0

Hier ein Beispiel ist die Scanner-Klasse:

Scanner s = new Scanner("53+12-1+12"); 
String token; 
while (null != (token = s.findInLine("\\d+|[+-]"))) 
    System.out.println(token); 

Ausgang: (ideone.com demo)

jedoch
53 
+ 
12 
- 
1 
+ 
12 

Beachten Sie, dass, wenn Sie zu bewerten den Ausdruck versucht, wird diese von begrenztem Nutzen sein, wie y Sie müssen immer noch auf Operator Vorrang und mögliche Parenthisierung achten. Ich würde Ihnen empfehlen, einen geeigneten Parser-Generator für solche Aufgaben zu verwenden.

+0

Eine andere Lösung für das gleiche Problem mit Scanner ist http://stackoverflow.com/questions/3350312/reading-char-array-of-number-more-than-10/3351024#3351024 – dkarp

0

Ein regex die für Sie arbeiten sollten, ist:

[0-9]+|[^0-9]+ 

würden Sie die Java-String Match oder Matcher Klassen verwenden, um zu tun, die Arbeit für Sie

Sie ersetzen den [^ 0-9] + Teil mit dem Satz von Operatoren, die Sie zum Beispiel unterstützen:

[0-9]+|[+-/*] 
2

Ich nehme an, Sie versuchen, irgendeine Art von arithmetischen Prozessor zu schreiben, also werde ich Sie wie ANTLR verwenden, um einen Parser-Generator vor. Es hat ein Tutorial zum Schreiben einer arithmetischen Grammatik.

Parser-Generatoren sind sehr allgemein, so dass es für Ihr Projekt vielleicht übertrieben ist, aber es ist immer noch einen Blick wert. Es wird immer nützlich sein zu wissen, wie (und vor allem wann) ein Parser-Generator verwendet wird.

0

Sie können pattern für eine gute Dokumentation betrachten. Sie String wird wie [0-9]+\p{Punct}{1}[0-9]+ etwas entsprechen Es gibt Beispiele am begenning des Dokuments, wie man es verwenden