检查传入的字符串是否可解析为整数?

6

我想检查我传递给 Integer.valueOf(String s)String 是否是一个有效的可解析字符串。 如果无法解析,则需要返回0。

我是这样做的:

try{
    Integer.valueOf(String s)
} catch(NumberFormatException e) {
    return 0;
}

这样做是不好的吗?


1
不,这并不糟糕(因为你正在处理异常)。虽然你也可以使用 string.matches("\\d+") 来检查它是否只包含数字。 - TheLostMind
十进制也是数字,但正则表达式应该适用于整数。 - Mite Mitreski
1
我认为你的代码已经达到了最好的水平。另外请注意,HotSpot针对在现场捕获并且在catch块中未被取消引用的异常进行了特定的优化。它将编译成完全符合您要求的代码(不会生成堆栈跟踪等)。 - Marko Topolnik
1
@MansoorSiddiqui 不需要处理整数的小数部分。 - Marko Topolnik
1
我的意思是以“.0”结尾的整数。Integer.parseInt(String)可以很好地解析它们。 - Mansoor Siddiqui
显示剩余7条评论
3个回答

7

方法1:使用正则表达式检查是否为数字的有效性

public static int parseStrToInt(String str) {
        if (str.matches("\\d+")) {
            return Integer.parseInt(str);
        } else {
            return 0;
        }
    }

方法二:使用Java内置的java.text.NumberFormat对象,查看解析字符串后的解析器位置是否在字符串的末尾。如果是,则可以假定整个字符串为数字。

public static int strToInt(String str) {
    NumberFormat formatter = NumberFormat.getInstance();
    ParsePosition pos = new ParsePosition(0);
    formatter.parse(str, pos);

    if (str.length() == pos.getIndex()) {
        return Integer.parseInt(str);
    } else {
        return 0;
    }
}

4
我认为该字符串应与[+-]?\d+相匹配。可以包含负整数(因此字符串以“-”开头)和写成以“+”开头的正整数。 - BackSlash

4
我会使用以下代码:
s = s.trim(); // sometimes user inputs white spaces without knowing it
int value;
if (s.length() == 0) {
    value = 0; // obviously not a string
} else {
    try{
        value = Integer.valueOf(s);
    } catch(NumberFormatException e) {
        value = 0;
    }
}

// do whatever you like here

请在这一行加上分号。 value = Integer.valueOf(s) ; - Mann
Java的索引从0开始,因此if (s.length == 0) {...是错误的。应该是if (s.length < 0) {... ;) - Cardinal System
是的,你说得对,Java索引从0开始,但我不明白你的意思!让我指出s.length() < 0始终为false - yaser eftekhari

1

嗨,即使数字是双倍或长整型,这也能正常工作,在解析时非常有用。

List<String> myStrings = new ArrayList<String>();

myStrings.add("text");
myStrings.add("25");
myStrings.add("102.23333333");
myStrings.add("22.34");

NumberFormat nf = NumberFormat.getInstance();
for( String text : myStrings){
    try {
        System.out.println( nf.parse(text));
    } catch (ParseException e) {
        e.printStackTrace();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接