0

私のアプリケーションは、常に 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);
    }

このコードでは、障害を十分に明らかにできない場合があります。ただし、プログラムを整数変換せずに実行したままにしておくと、個々の数字はそれ自体として出力され、複数桁の数値はそれぞれ、余分な文字なしで各行に数字とともに出力されます。

目に見えない余分な文字に加えて、関連するデータを変換しようとしていることは確かです。

  1. これらの目に見えない文字が何であるかを理解するにはどうすればよいですか?
  2. それらを取り除き、サブプロセスの数値出力のみの整数表現を取得する最良の方法は何ですか?

参考:サブプロセス呼び出しのコード:

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));

前もって感謝します。

4

2 に答える 2

2
  1. 解析しようとしているすべての文字の数値表現を確認できます。メソッドを使用できますstatic int Character.digit(char ch, int radix)。0~9の数値表現の範囲外のものはすべてあなたの「悪い」性格です。
  2. String.replaceAll("[^0-9]+", "")\n記号を含め、入力から数字以外のすべてを削除します。
于 2011-08-09T09:59:18.683 に答える
0

「見えない文字」が空白の場合は、String.trim()メソッドを使用してそれらを取り除きます。入力に他の文字が含まれる可能性がある場合は、正規表現を使用して数字のみを抽出する必要があります。

于 2011-08-09T05:00:07.897 に答える