Java ParseInt() - 捕捉带有前导零的字符串
Java ParseInt() - Catching Strings with a leading zero
Java 的 ParseInt 方法将愉快地解析带有前导零的十进制值而不抛出异常,剥离零:
int value = Integer.parseInt("050", 10);
将得到整数值 50。
但是,我有一个应用程序要求像这样的字符串作为无效输入被拒绝。到目前为止,我对该问题的解决方案是将解析后的整数转换回字符串,并比较 original/parsed 字符串的长度以查看是否有任何字符已被剥离,例如:
String original = "050";
value = Integer.parseInt( "050", 10);
String parsed = Integer.toString(value);
if (original.length() != parsed.length()) {
System.exit(1);
}
效果很好,但感觉有点老套。有没有更好的方法来检测和处理前导零?
检查第一个字符是否为0 :
if (original.charAt(0)=='0')
或
if (original.startsWith("0"))
如果字符串以 0 开头,您根本不想调用 parseInt
。
我认为比较单个字符比使用正则表达式更有效。
您可以使用正则表达式并检查它是否有前导 0
你可以写
看到您关于允许使用前导空格的评论后,您可以使用:
if(original.matches(".\s0.*[1-9]")) // Wrong number with leading zeros
这样 00000 仍然是零,如果它有效的话
当您获得字符串输入时,您可以使用方法 String.charAt(int)
来检查显式字符。
但是,当您仅使用 input.charAt(0)
时,用户可以使用 space.
来避免前导零
我的建议是:
String decimalChars = "123456789";
boolean reject = true, hasZeros = false;
for (int i = 0; i < input.length; i++) {
if (input.charAt(i) == '0') { // or other chars you don't want
hasZeros = true;
reject = false;
} else if (decimalChars.contains(input.charAt(i)) {
if (hasZeros) {
reject = true;
} else {
reject = false;
}
break;
}
}
}
使用它,您可以通过检查 reject
来做任何您想拒绝错误输入的事情。当找到 decimalChars 数组中的字符时,代码将中断。 reject
如果之前找到零则为真,否则为假。此代码还允许 space 开头,并且不会拒绝像 0000
这样的输入。空字符串也将被拒绝,因为 reject
初始化为 true.
希望对您有所帮助!
Java 的 ParseInt 方法将愉快地解析带有前导零的十进制值而不抛出异常,剥离零:
int value = Integer.parseInt("050", 10);
将得到整数值 50。
但是,我有一个应用程序要求像这样的字符串作为无效输入被拒绝。到目前为止,我对该问题的解决方案是将解析后的整数转换回字符串,并比较 original/parsed 字符串的长度以查看是否有任何字符已被剥离,例如:
String original = "050";
value = Integer.parseInt( "050", 10);
String parsed = Integer.toString(value);
if (original.length() != parsed.length()) {
System.exit(1);
}
效果很好,但感觉有点老套。有没有更好的方法来检测和处理前导零?
检查第一个字符是否为0 :
if (original.charAt(0)=='0')
或
if (original.startsWith("0"))
如果字符串以 0 开头,您根本不想调用 parseInt
。
我认为比较单个字符比使用正则表达式更有效。
您可以使用正则表达式并检查它是否有前导 0
你可以写
看到您关于允许使用前导空格的评论后,您可以使用:
if(original.matches(".\s0.*[1-9]")) // Wrong number with leading zeros
这样 00000 仍然是零,如果它有效的话
当您获得字符串输入时,您可以使用方法 String.charAt(int)
来检查显式字符。
但是,当您仅使用 input.charAt(0)
时,用户可以使用 space.
我的建议是:
String decimalChars = "123456789";
boolean reject = true, hasZeros = false;
for (int i = 0; i < input.length; i++) {
if (input.charAt(i) == '0') { // or other chars you don't want
hasZeros = true;
reject = false;
} else if (decimalChars.contains(input.charAt(i)) {
if (hasZeros) {
reject = true;
} else {
reject = false;
}
break;
}
}
}
使用它,您可以通过检查 reject
来做任何您想拒绝错误输入的事情。当找到 decimalChars 数组中的字符时,代码将中断。 reject
如果之前找到零则为真,否则为假。此代码还允许 space 开头,并且不会拒绝像 0000
这样的输入。空字符串也将被拒绝,因为 reject
初始化为 true.
希望对您有所帮助!