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
Antwort
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)
jedoch53
+
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.
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
Normalerweise würden Sie einen Scanner verwenden. Hier ist ein Beispiel für einen Scanner in Java geschrieben: http://download.oracle.com/javase/tutorial/essential/io/scanning.html
Sie können auch java.util.Scanner verwenden - hier Tutorial: http://www.java-tips.org/java-se-tips/java.util/scanning-text-with-java.util.scanner-3.html
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]+|[+-/*]
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.
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
- 1. Excel-Berechnungen
- 2. API-Träger-Tokens - kann ich benutzerdefinierte Tokens verwenden?
- 3. Zeichenfolge Parse Java
- 4. Django - 2 csrf Tokens
- 5. Verfolgen eines eBay-Tokens
- 6. Ajax mit Tokens
- 7. Display-String Tokens
- 8. Refreshing Benutzer Facebook Tokens
- 9. Wie man Tokens zählt?
- 10. PayPal & oAuth Tokens
- 11. Berechnungen Funktioniert nicht richtig
- 12. Sonnenaufgang/Set Berechnungen
- 13. Ubuntu tötet meine Berechnungen
- 14. komplexe Berechnungen in C#
- 15. Python-Datensatz-Berechnungen
- 16. Berechnungen mit PyMongo
- 17. Berechnungen zwischen Eingabefeldern
- 18. Sharepoint Liste Berechnungen
- 19. Multithreading-Berechnungen in Java
- 20. Beispielprobleme für gleichzeitige Berechnungen
- 21. Excel Berechnungen und VBA
- 22. Schwere JavaScript-Berechnungen Block
- 23. Mit array.length in Berechnungen
- 24. Grid Berechnungen mit JavaScript
- 25. PHP Transport Rate Berechnungen
- 26. Frame-Berechnungen in `viewDidLayoutSubviews`
- 27. NSDate-Einheiten und Berechnungen
- 28. Berechnungen vor Klasse erweitern
- 29. SAS-Berechnungen in Datastep
- 30. Berechnungen basierend auf Optionsfeldauswahl
Haben Ihre Ausdrücke Klammern? – aioobe
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
Nein, werden sie nicht. Nur ein einfacher Taschenrechner. –