2014-12-12 2 views
1

У меня есть простой код обработки, который считывает последовательные данные, записывает их в строку и, в зависимости от того, что содержится в этой строке, преобразует строку в int или char и выполняет некоторые конкретный код.Ошибка преобразования строки в Int

Моя проблема в том, что когда я пытаюсь преобразовать данные в целое число, это либо дает мне ошибку, либо дает мне значение нуля (int (string) возвращает ноль, Integer.parseInt (string) возвращает ошибку). Ниже приведена соответствующая часть моего кода.

String serialreadbuffer; 
int t = 0; 
boolean STimer = false; 

// Serial Message Display (From Controller) 
if (myPort.available() > 0) 
{ // Check if data is available 
    serialreadbuffer = myPort.readStringUntil('\n');   // read it and write to variable 
    if (serialreadbuffer.charAt(0) == 'I') 
    { 
    SerialText.setText("INITIALIZED"); 
    t = 0; 
    STimer = true; 
    } 
    else if (serialreadbuffer.charAt(0) == 'U') 
    { 
    SerialText.setText("UPDATED"); 
    t = 0; 
    STimer = true; 
    } 
    else if (serialreadbuffer.charAt(0) == 'D') 
    { 
    SerialText.setText("DISABLED"); 
    t = 0; 
    STimer = true; 
    } 
    else if (serialreadbuffer.charAt(0) == 'E') 
    { 
    SerialText.setText("SERIAL COMMUNICATION ERROR"); 
    t = 0; 
    STimer = true; 
    } 
    else 
    { 
    int numberbuffer = Integer.parseInt(serialreadbuffer) * 60/6144; 
    serialreadbuffer = str(numberbuffer); 
    RPMText.setText(serialreadbuffer); 
    } 
} 

Как ни странно, если бы я присвоить значение строки непосредственно serialreadbuffer (т.е. serialreadbuffer = «6144») он будет работать, но если я получаю один и тот же номер из моего последовательного порта дает мне следующую ошибку:

NumberFormatException: For input string: "6144" 

, и это дает мне эту ошибку в следующей строке:

int numberbuffer = Integer.parseInt(serialreadbuffer) * 60/6144; 

Я также возникли проблемы с String.equals() сравнивает (он всегда будет возвращать ложь, даже если й строки были одинаковыми), однако я обошел это, преобразовывая первый символ в char и используя его для сравнения. Не уверен, что это связано с этой проблемой или нет.

Я прочесываю интернет и не нашел никакой помощи в этом вопросе. Я не опытный программист, поэтому, возможно, это нечто очевидное, что я просто не вижу. Ваша помощь очень ценится.

+2

Есть ли вероятность того, что есть '\ r' до конца строки? Попробуйте записать длину строки перед синтаксическим разбором ... или в идеале дамп всей строки, по одному символу за один раз, печатая значение 'int' каждого' char' (если вы понимаете, что я имею в виду), чтобы вы могли видеть * точно * какой там. –

+0

Итак, когда я печатаю значение int одного символа за раз, он дает мне 54, 49, 52, 52, 13, 10. Из этого вы, очевидно, видите, что это также дало мне длину 6. Так что кажется есть некоторые непечатаемые символы, висящие на конце. Каков наилучший способ справиться с этим, используя подстроку от 0 до (длина-2)? Значит, эти дополнительные символы поступают из моих серийных данных? –

+0

Похоже, что ваш метод readStringUntil включает в себя '\ r \ n' в конце. Возможно, вы захотите исправить это ... –

ответ

2

обрезать строку, прежде чем разобрать его insetad из

int numberbuffer = Integer.parseInt(serialreadbuffer) * 60/6144; 

сделать

int numberbuffer = Integer.parseInt(serialreadbuffer.trim()) * 60/6144; 

вы можете иметь непечатные символы, например, \ r в нем.

+0

К сожалению, обрезка, похоже, не решила проблему, я все равно получаю ту же ошибку. –

+0

@JasonAbbas: Вы только что назвали 'trim()' в строке или что-то сделали с результатом? –

+0

хорошая точка, я обновил свой ответ! Он может сделать это на дополнительной линии! – wgitscht

0

Может быть какое-то место со значением. Попробуйте обрезать строку перед преобразованием.

Serialreadbuffer.trim()

+0

К сожалению, обрезка не помогла решить проблему, я все равно получаю ту же ошибку. –

Смежные вопросы