2016-03-26 13 views
-3

Ich habe ein Problem mit meinem Code. Ich denke, das Problem ist etwa delims=[+,-,*,/]+. wenn ich if (delims.equals("[+]+")) für ex schreibe, dauert es nur [+]. Allerdings ist delims nicht gleich [+]. Ithink du hast was ich meine. delims gleich [+,-,*,/]+.Zeichenfolge Parse Java

public static void main(String[] args) { 

     System.out.println("Please enter your calculation"); 
     Scanner sc = new Scanner(System.in); 
     String s=sc.next(); 
     String delims="[+,-,*,/]+"; 
     String[] tokens=s.split(delims); 


     for(int i=0; i<1; i++){ 
     String s1=tokens[i]; 
     for (int j=1; j<2; j++){ 
     String s2=tokens[j]; 


     double n1=Double.parseDouble(s1); 
     double n2=Double.parseDouble(s2); 


     if (delims.equals("[+]+")){ 
     System.out.println(n1+n2); 
    System.exit(0); } 

     if (delims.equals("[-]+")){ 
      System.out.println(n1-n2); 
     System.exit(0);} 

     if (delims.equals("[*]+")){ 
       System.out.println(n1*n2); 
     System.exit(0);} 

       if (delims.equals("[/]+")){ 
       System.out.println(n1/n2); 
       System.exit(0); 
       } 
}}}} 
+0

Siehe [this] (http://stackoverflow.com/questions/5993779/java-use-split-with-multiple-delimiters) Frage. Sie müssen ihm sagen, worauf er die Zeichenfolge aufteilen soll. Es scheint auch, dass Sie versuchen, Regex ohne zu sagen, dass Sie die Zeichenfolge mit Regex suchen möchten ... – Kidiskidvogingogin

+0

Sie wollten wahrscheinlich sagen, wenn (s2.equals ("[+] +")) ... In Ihrem Code, den Sie mit "[+] +" vergleichen, aber delims ist immer "[+, -, *, /] +". – Milan

+0

Ja genau das –

Antwort

1

Der Begrenzer verbraucht wird (weggeworfen), aber Sie es brauchen.

Versuchen Sie stattdessen:

String[] tokens = s.replace(" ","").split("\\b"); 

\b bedeutet „Wortgrenze“ und Ziffern werden Wortzeichen betrachtet, so dass dies funktionieren wird, wenn die Anzahl Teile des Eingangs ganze Zahlen sind.

Ich habe einen Aufruf zu ersetzen, um alle Leerzeichen zu entfernen.

+0

numberFormatException ( –

+0

@ Lala hängt davon ab, was Sie eingeben, aber ich würde erwarten Jedes gerade indizierte Token ist eine Nummer und jedes ungerade ein Operator. Probieren Sie dies aus, um zu sehen, wie es sich teilt: 'Arrays.stream (Token) .forEach (System.out :: println);' – Bohemian

+0

es funktioniert nicht Eingabe wie folgt eingeben: 12 + 5 oder 9/4 Mein Problem ist delims ist mehrfach und wenn ich für ex if schrieb (delims.equals ("[+] +) wird es nur [+] dauern und nicht mit delims übereinstimmen ist multiple –