java - 读取 StringBuffer 的数字输出时 ParseInt 引发异常

标签 java android exception parseint stringbuffer

我的应用程序读取命令行程序的输出,该输出始终是 0-3 位数字。数据以 stringBuffer 开始,通过 .toString 发送,第三步是将其转换为整数以进行比较。使用 Integer.parseInt 的最后一步会引发 java.lang.NumberFormatException。例如,如果命令行程序的输出为“0”,则属于异常(exception)情况。

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

提前致谢。

最佳答案

  1. 您可以检查您尝试解析的每个字符的数字表示形式。您可以使用static int Character.digit(char ch, int radix)方法。凡是超出 0-9 数字表示范围的都是你的“坏”性格。
  2. String.replaceAll("[^0-9]+", "")将从您的输入中删除所有非数字,包括 \n符号。

关于java - 读取 StringBuffer 的数字输出时 ParseInt 引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6991385/

相关文章:

java - ActionBarSherlock 有很多错误

android - 为 ACTION_SEND Intent 过滤器 uri 获取持久性 URI 权限导致 SecurityException

java - 如何从 web 服务中抛出异常?

java - 递归方法不遍历所有树节点

java - POJO 生成器中的 Android Studio 错误

android - Crashlytics 不再显示错误详细信息

java - 在 TextView 中将字符串的一部分设为粗体

C++(标准)异常和 Unicode

java - 为什么会出现这个异常?

java - 我如何通过用户输入更改文本按钮