2016-07-03 12 views
-3

Ich habe eine Split-Funktion geschrieben, deren Konstruktor ein String-Objekt (For Example: 21.316621 87.01393 9830.686907). Dann teilt es es in drei Teile mit Split() -Funktion. Konvertiert dann diese drei neuen String-Objekte in drei primitive Double-Typen. Ich möchte einige Rechenoperation auf diesen doppelten Werte durchzuführen, aber es Exception als following--Nummer Format Ausnahme in Java

Exception in thread "main" java.lang.NumberFormatException: empty String 
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842) 
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
at java.lang.Double.parseDouble(Double.java:538) 

Split-Funktion zeigt als following--

public class Split { 


public Split(String str){ 


Double[] lla = new Double[3]; 


    String[] parts=str.split("\t"); 


lla[0] = Double.parseDouble(parts[0]); 


lla[1] = Double.parseDouble(parts[1]); 
lla[2]= Double.parseDouble(parts[2]); 
lla[0]+=123.567; 
lla[1]+=12.456; 
lla[2]+=76.5678; 
System.out.println(lla[0]); 
System.out.println(lla[1]); 
System.out.println(lla[2]); 
System.out.println(); 
} 
} 

Bitte helfen Sie mir aus diesem problem.thanks

+0

Was erwarten Sie, wenn Sie zwei oder mehr Tabs verwenden, um jede Zahl zu begrenzen? (Dies ist Ihr Problem hier) – Tom

+1

Verwenden Sie Ihren Debugger. Fügen Sie System.out.println() in dem Code hinzu, um das Problem zu finden. Die Nachricht ist ziemlich klar: einer Ihrer Teile ist tatsächlich eine leere Zeichenfolge. Dies ist Debugging 101. –

+0

Sind Sie sicher, dass Sie eine echte Zeichenfolge an Ihre Funktion übergeben? Und was ist mit "\ t"? Bist du dir sicher, dass deine Strings durch "\ t" und nicht durch Leerzeichen getrennt sind? – pooyan

Antwort

-1

Dieser Fehler bedeutet, dass eine dieser: parts[0], parts[1], parts[2] ein leerer String ist und enthält keinen double Wert. So Java couldnt es nicht zu einem Double analysieren. Überprüfen Sie Ihre Eingabe String, die Sie spalten, um das parts Array zu erstellen.

Wenn Sie Ihre Eingabe nicht ändern können, überprüfen und entfernen Sie die leeren Werte aus dem Array parts, bevor Sie sie analysieren.

Überprüfen Sie ein funktionierendes und nicht funktionierendes Beispiel (mit dem gleichen Fehler) für die gleiche Methode, aber verschiedene Eingaben here.

-1

Wenn Sie verwenden, ersetzen

String[] parts = str.split("\t")

mit folgenden

String[] parts = Stream.of(str.split("\\s"))  // Split at each whitespace 
         .filter(x -> !x.isEmpty()) // Exclude empty Strings 
         .toArray(String[]::new); // Makes a new String array of it 

es dem Parse-Abschnitt des Konstrukteurs sicher nicht leer String macht zu machen.

+0

Nun der traurige Teil: Ich habe total zusätzliche Tab-Zeichen am Anfang oder am Ende von 'str' verpasst, was momentan nicht behandelt wird, aber bei deiner ersten Annäherung war ^^. Es tut uns leid. Übrigens: Ich habe hier nicht gewählt. – Tom

+0

Ich auch nicht, aber ich vermute, dass es wegen der falschen Handhabung von Tabs am Anfang oder am Ende des Strings passiert ist?(was aber meine Schuld ist) – Tom

+0

@Tom Nun, ich weiß nicht, was ich denken soll, zwei downvotes auf einen Arbeitscode ... –