我想检查我传递给 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;
}
}
方法二:使用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;
}
}
[+-]?\d+
相匹配。可以包含负整数(因此字符串以“-”开头)和写成以“+”开头的正整数。 - BackSlashs = 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
if (s.length == 0) {...
是错误的。应该是if (s.length < 0) {...
;) - Cardinal Systems.length() < 0
始终为false
! - yaser eftekhari嗨,即使数字是双倍或长整型,这也能正常工作,在解析时非常有用。
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();
}
}
string.matches("\\d+")
来检查它是否只包含数字。 - TheLostMind