[英]ParseInt raises exception when reading numeric output of StringBuffer
我的应用程序读取命令行程序的输出,该输出始终是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'周围的换行符。 我知道转换可能很棘手,我已经检查了charset并明确地将其设置为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));
提前致谢。
static int Character.digit(char ch, int radix)
方法。 超出数字表示范围0-9的所有内容都是“坏”字符。 String.replaceAll("[^0-9]+", "")
将删除输入中的所有非数字,包括\\n
符号。 如果'隐形字符'是空格,只需使用String.trim()
方法去除它们。 如果输入中可能存在其他字符,则需要使用正则表达式仅提取数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.