2016-12-13 5 views
-2

Ich versuche, einen Teilstring eines Strings txt und dann einen anderen Teil dieses Strings auf einen Wert, aber immer wenn ich versuche, Spannung [t] mit dem doppelten Wert des Teilstrings, I bekomme einen leeren Stringfehler. Hier ist der Teil des Codes, wo ich den Fehler bekomme:Java Teilzeichen zurückgeben leer

if(txt.substring(0,1).equals("1")) { 
    //Voltage button pressed(S3) 
       //===================================================================== 

    text3.setText(txt.substring(1)); 
    voltage[t] = (Double.parseDouble(text3.getText())); 
} 

Wer weiß, warum dieser Fehler auftreten würde? Jede Hilfe wäre willkommen. Vielen Dank!

Edit: Hier die genaue Ausnahme Ich erhalte:

Caused by: java.lang.NumberFormatException: empty String 
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) 
at sun.misc.FloatingDecimal.parseDouble(Unknown Source) 
at java.lang.Double.parseDouble(Unknown Source) 
at UartApp$11.run(UartApp.java:728) 
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) 
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135) 

Der Fehler tritt auf der Leitung 728

Auch hier ist der Code, den ich mit dem int und das Hinzufügen der konvertieren "1". Der Mikrocontroller ist in C programmiert:

 char *p, text[32]; 
     int i = readADC(POT); 

     sprintf(text,"1%d", i); 
     p = text; 
     UartTxString(p); //Sends string out 
+0

Wenn 'txt' die Zeichenkette' 1' ist, ist Ihre 'if' Anweisung wahr und' text3' wird auf die Zeichenkette nach der '1' aktualisiert, d. H. Auf eine leere Zeichenkette. Vielleicht enthält 'txt' also nicht, was Sie denken, wenn Sie denken,' text3' wäre nicht leer. – Andreas

+0

@smossel Hoffentlich '' 1 ''sonst ist unser Verständnis des Fehlers falsch. Wie pro OP * versucht, den Wert nach der ersten Ziffer für die zweite Zeichenfolge zu nehmen * –

+1

Wenn ich versuche, txtstring (1) auszugeben, bekomme ich den richtigen Wert in das Textfeld geschrieben, aber es wird einfach nicht lassen Ich analysiere es zu einem Doppel. – TestyTest

Antwort

-1

Wenn der Code, den Sie vollständig und darstellbaren vorgesehen ist, dann Double.parseDouble(...) eine Ausnahme auslösen würde eine leere Zeichenfolge, wenn und nur anzeigt, ob txt ist die Zeichenfolge "1" (und sonst nichts).

Angenommen, Sie möchten den doppelten Wert von "1" erhalten, dann können Sie dies beheben, indem Sie text3.setText(txt.substring(1)); in text3.setText(txt.substring(0,1)); ändern.

Wenn Sie stattdessen den doppelten Wert von irgendetwas in der Zeichenfolge nach dem führenden "1" erhalten möchten, dann haben Sie möglicherweise ein Problem an anderer Stelle in Ihrem Code - wo auch immer Sie den Wert von setzen txt. Wenn ja, könnten Sie diesen Code auch posten, damit wir einen Blick darauf werfen können?

(denke ich, was kann passieren, dass Sie "1"-txt voranstellen soll, sondern ersetzt versehentlich den Wert txt mit "1" vollständig)


EDIT:

Das Problem kann stattdessen mit text3 sein.

Versuchen Sie dies. Ersetzen

voltage[t] = (Double.parseDouble(text3.getText())); 

mit

voltage[t] = (Double.parseDouble(txt.substring(1))); 

EDIT # 2:

Wenn die oben genannten Ersatz das Problem nicht beheben, dann muss wahr sein, dass txt ist genau die Zeichenfolge "1" (und nichts anderes) in diesem Umfang. Das Problem kann darin liegen, wie Sie die '1' zu txt voranstellen.

+0

Immer noch der gleiche Fehler. – TestyTest

+0

@TestyTest Was ist die genaue Ausnahme/Fehler und zugehörige Nachricht, die Sie bekommen?(Zitieren Sie es hier irgendwo, wenn möglich) – Travis

+0

@TestyTest Auch wenn Sie immer noch die gleiche Antwort erhalten, auch nachdem Sie diese Änderung vorgenommen haben, dann muss 'txt' ** ** nur die Zeichenfolge' "1" 'sein (und sonst nichts) in diesem Umfang. Wie genau haben Sie eine "1" bis "Txt" vor? Da könnte etwas los sein ... – Travis

Verwandte Themen