私のアプリケーションは、常に 0 ~ 3 桁の数字であるコマンド ライン プログラムの出力を読み取ります。データは stringBuffer として開始され、.toString に送信されます。3 番目のステップは、比較のためにそれを整数に変換することです。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));
前もって感謝します。