我的应用程序读取命令行程序的输出,该输出始终是 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));
提前致谢。