Мое приложение считывает выходные данные программ командной строки, которые всегда являются цифрами 0-3. Данные начинаются как stringBuffer, отправляются .toString, и третий шаг - преобразовать их в целое число для сравнения. Последний шаг с использованием Integer.parseInt вызывает исключение java.lang.NumberFormatException. Например, если выходные данные программы командной строки равны «0», это исключение.
08-08 18:31:30.167: ERROR/AndroidRuntime(26484): FATAL EXCEPTION: main
08-08 18:31:30.167: ERROR/AndroidRuntime(26484): java.lang.NumberFormatException: unable to parse '0
08-08 18:31:30.167: ERROR/AndroidRuntime(26484): ' as integer
08-08 18:31:30.167: ERROR/AndroidRuntime(26484): at java.lang.Integer.parse(Integer.java:433)
Обратите внимание на разрыв строки вокруг '0'. Я знаю, что преобразование может быть сложным, и я проверил кодировку и явно установил ее в UTF-8. Также я пытался проверить '\ n' или другие нечисловые символы с помощью этого кода перед преобразованием:
System.out.println(score);
for(char c: score.toCharArray()){
System.out.println(c);
}
Этот код может недостаточно раскрыть ошибку. Однако если программу оставить без преобразования целых чисел, каждое отдельное числовое число будет напечатано как само по себе, и каждое многозначное число будет напечатано с цифрой в каждой строке без каких-либо посторонних символов.
Я вполне уверен, что я пытаюсь преобразовать соответствующие данные в дополнение к некоторым дополнительным невидимым символам.
- Как я могу понять, что это за невидимые символы?
- Каков наилучший способ избавиться от них и получить целочисленное представление только числового вывода подпроцесса?
Для справки:
Код вызова подпроцесса:
try{
Process subProc = Runtime.getRuntime().exec("data/data/com.app/bin/prog /sdcard/file");
BufferedReader reader = new BufferedReader(
new InputStreamReader(subProc.getInputStream(), Charset.defaultCharset()), 10);
int read;
char[] buffer = new char[10];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
subProc.waitFor();
score = output.toString();
} catch (IOException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println(score);
for(char c: score.toCharArray()){
System.out.println(c);
}
return score;
А для ударов, функция ParseInt, которая вызывает исключение:
int score = Integer.parseInt(NativeClass.getScore(file));
Заранее спасибо.