Java ParseInt() - 捕获具有前导零的字符串

s-l*_*low 2 java zero parseint leading-zero

Java的ParseInt方法将很乐意解析前导零提供的十进制值,而不会抛出异常,剥离零:

int value = Integer.parseInt("050", 10);
Run Code Online (Sandbox Code Playgroud)

将导致整数值50.

但是,我有一个应用程序需要这样的字符串作为无效输入被拒绝.到目前为止,我对该问题的解决方案是将解析后的整数转换回字符串,并比较原始/解析字符串的长度,以查看是否已剥离任何字符,例如:

String original = "050";
value  = Integer.parseInt( "050", 10);
String parsed = Integer.toString(value);
if (original.length() != parsed.length()) {
    System.exit(1);
}
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,但感觉有点hacky.是否有更好的方法来检测和处理前导零?

Era*_*ran 8

检查第一个字符是否为0:

if (original.charAt(0)=='0')
Run Code Online (Sandbox Code Playgroud)

要么

if (original.startsWith("0"))
Run Code Online (Sandbox Code Playgroud)

如果String以0开头,则根本不想调用parseInt.

我认为比较单个字符比使用正则表达式更有效.