[英]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.