我的目标是从字符串中取出数字并将其转换为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)
我在这里遗漏了什么吗?提前谢谢!
答案 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());
}