2016-04-24 13 views
0

Ich mache einen Rechner für die Schule und alles funktioniert außer meinem Scanner, denn wenn es eine negative Ganzzahl es sieht es nicht als eine negative Zahl sieht es nur das Subtraktionszeichen als Operator und ich will es sehen wie ein Teil des Operanden:Infix zu postfix lesen negative ganze Zahlen als negative

String exp = "8+4*-12-4"; 
    String[] temp = new String[exp.length()]; 
    temp =exp.split("(?<=[-+*/])|(?=[-+*/])"); 

das macht es richtig, wenn es nur positive ganze Zahlen ist. zum Beispiel Eingang: 8 + 4 * 12-4 und der Ausgang: [8, 4, 12, *, + 4, -]

aber mit einer negativen Zahl es es richtig tut! so das ist, was mit ich helfen möchte, Dank im Voraus

Antwort

0

LinkedList <String>list= new LinkedList<String>(); nur jedes der Zeichen in der Zeichenkette nimmt und fügt jeweils auf die resultierende Liste. Anstatt dies zu tun, müssen Sie Syntax-bewussten Code schreiben. Wenn Sie auf Leerraum zwischen allen Tokens bestehen können, können Sie auf Leerzeichen with, for example, String.split teilen. Wenn nicht, besteht die einfachste Alternative darin, die Zeichen in der Zeichenfolge "von Hand" zu durchlaufen und die Ausgabe auf diese Weise zu erzeugen.

Obwohl ich auch String.split mit einem positiven Non-Capturing-Lookahead verwenden kann, um auch auf Operatoren zu splitten, ist es schwieriger, reguläre Ausdrücke zu dieser Beherrschungsstufe zu finden, als das Problem im Code zu lösen. Ich kann kein Beispiel für die positive Lookahead Assertion-Implementierung geben, da ich mir nicht die Zeit nehmen möchte, eine Entwicklungsumgebung zu erstellen, den Code zu schreiben, Testfälle zu erstellen und sie zu debuggen - da ich das nicht glaube die Vorgehensweise, die Sie auf jeden Fall treffen sollten.

+0

Könnten Sie mir ein Beispiel geben, wie Sie in diesem Fall Split verwenden könnten? Ich habe gegoogelt, kann aber nicht wirklich ein gutes Beispiel finden, danke im Voraus – JohnBanana

+0

@JohnBanana: fertig –