Android隐蔽字符串到整数numberformatexception

时间:2015-10-02 17:54:41

标签: java android numberformatexception

我的目标是从字符串中取出数字并将其转换为int。 例如: 12.7(字符串)将变为127(int) 156-06(字符串)将变为15606(int)

这是我使用的代码:

private static int convertToDigits(String input){
    StringBuilder sb = new StringBuilder(input.length());
    for(int i = 0; i < input.length(); i++){
        char c = input.charAt(i);
        if(c > 47 && c < 58){
            sb.append(c);
        }
    }
    String result = sb.toString().trim();
    Log.d("Result", result);
    return Integer.parseInt(result);
}

当我记录结果时,我得到127作为我想要的字符串值,但当我将其转换为int时,我得到NumberFormatException

java.lang.NumberFormatException: Invalid int: ""
        at java.lang.Integer.invalidInt(Integer.java:138)
        at java.lang.Integer.parseInt(Integer.java:358)
        at java.lang.Integer.parseInt(Integer.java:334)
        at com.dcasillasappdev.mytrackfieldteam.utility.Utility.convertToDigits(Utility.java:333)

我在这里遗漏了什么吗?提前谢谢!

1 个答案:

答案 0 :(得分:2)

  

我在这里错过了什么吗?

是的,空输入的情况。 你的方法适用于非空字符串, 你只需要为空输入添加特殊处理, 例如:

if (input.isEmpty()) {
    return 0;  // or whatever way you want to handle this case ...
}

顺便说一下,这是一种更简单的方式来删除所有非数字字符并转换为int

return Integer.parseInt(input.replaceAll("\\D+", ""));

但是如果你真的想坚持原始的方法迭代字符和使用字符串构建器,那么这是一个更好的方式来写:

private static int convertToDigits(String input) {
    if (input.isEmpty()) {
        return 0;
    }
    StringBuilder builder = new StringBuilder(input.length());
    for (char c : input.toCharArray()) {
        if('0' <= c && c <= '9') {
            builder.append(c);
        }
    }
    return Integer.parseInt(builder.toString());
}