2016-12-13 3 views
-2

Я пытаюсь взять подстроку строки txt, а затем установить другую часть этой строки в значение, однако всякий раз, когда я пытаюсь установить напряжение [t] с двойным значением подстроки, I 'Получая пустую строку. Вот часть кода, где я получаю ошибку:java substring return empty

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

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

Кто-нибудь знает, почему эта ошибка будет происходить? Любая помощь будет оценена по достоинству. Благодаря!

Edit: Вот точное исключение я получаю:

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) 

Ошибка возникает в строке 728

Кроме того, вот код, я использую, чтобы преобразовать Int и добавив "1". Микроконтроллер запрограммирован в C:

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

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

Если 'txt' является строкой' 1', ваш оператор 'if' является истинным, а' text3' обновляется до строки, следующей за '1', то есть до пустой строки. Так что, возможно, 'txt' не содержит того, что вы думаете, что он делает, если вы считаете, что' text3' не будет пустым. – Andreas

+0

@shmosel Надеюсь, что «1» «иначе наше понимание ошибки неверно. По мере того как OP * пытается принять значение после этой первой цифры для второй строки * –

+1

Если я просто попытаюсь вывести txt.substring (1), я получаю правильное значение, отправленное в текстовое поле, однако оно просто не позволит я разобрал его в двойник. – TestyTest

ответ

-1

Если код предоставляется полный и представим, то Double.parseDouble(...) будет сгенерировано исключение, указывающее на пустую строку, если и только если txt является строкой "1" (и больше ничего).

Предполагая, что вы хотите получить двойное значение "1", тогда вы можете исправить это, изменив text3.setText(txt.substring(1)); на text3.setText(txt.substring(0,1));.

Если вместо этого вы хотите получить двойное значение чего-либо в строке после ведущего "1", то я думаю, что у вас может быть проблема в другом месте вашего кода - где бы вы ни установили значение txt. Если да, можете ли вы опубликовать этот код, чтобы мы могли посмотреть?

(я думаю, что может происходить в том, что вы намеревались предварять "1" к txt, но вместо этого случайно заменить значение txt с "1" целиком)


EDIT:

Проблема может быть с text3.

Попробуйте это. Заменить

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

с

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

EDIT # 2:

Если выше замена не решить эту проблему, то она должна быть верно, что txt именно строка "1" (и ничего больше) в этой области. Проблема может заключаться в том, как вы добавляете '1' в txt.

+0

По-прежнему получает ту же ошибку. – TestyTest

+0

@TestyTest Какое точное исключение/ошибка и связанное сообщение вы получаете?(цитируйте его где-нибудь здесь, если это возможно) – Travis

+0

@TestyTest Кроме того, если вы все еще получаете тот же ответ даже после внесения этого изменения, тогда 'txt' ** должен ** быть только строкой' '1" '(и ничего больше) в этой области. Как именно вы добавляете '' 1'' в 'txt'? Там может что-то происходить ... – Travis