繁体   English   中英

要检查是否可以将字符串解析为Integer?

[英]To check is passed string parsable to Integer?

我想检查一个String我传递给Integer.valueOf(String s)一个有效的String来解析。 如果一个不可解析,我需要返回0。

我是通过以下方式完成的:

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

这样做是不好的方法吗?

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

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

方法2:使用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;
    }
}

我会用过:

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

嗨这甚至可以做到数字是双倍或长,这在解析时总是有用的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM