我想检查是String
我传递给Integer.valueOf(String s)
一个有效的字符串来解析。如果一个不可解析,我需要返回0.
我是按照以下方式做的:
try{
Integer.valueOf(String s)
} catch(NumberFormatException e) {
return 0;
}
这样做不好吗?
答案 0 :(得分:6)
方法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;
}
}
答案 1 :(得分: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
答案 2 :(得分: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();
}
}