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

Java ParseInt()-捕获前导为零的字符串,java,zero,parseint,leading-zero,Java,Zero,Parseint,Leading Zero,Java的方法将愉快地解析由前导零提供的十进制值,而不会引发异常,剥离零: int value = Integer.parseInt("050", 10); 将导致整数值为50 但是,我有一个应用程序,它要求这样的字符串作为无效输入被拒绝。到目前为止,我对该问题的解决方案是将解析后的整数转换回字符串,并比较原始/解析字符串的长度,以查看是否有任何字符被剥离,例如: String original = "050"; value = Integer.parseInt( "050", 10); S

Java的方法将愉快地解析由前导零提供的十进制值,而不会引发异常,剥离零:

int value = Integer.parseInt("050", 10);
将导致整数值为50

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

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')

如果字符串以0开头,则根本不想调用
parseInt


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

您可以使用正则表达式并检查它是否有前导0

你可以直接写

在看到您关于引导空白的评论后,您可以使用:

if(original.matches(".\\s0.*[1-9]")) // Wrong number with leading zeros

这样,00000仍然是零,如果它是有效的,当您获得字符串输入时,您可以使用方法
string.charAt(int)
检查显式字符。 但是,当您仅使用
input.charAt(0)
时,用户可以使用空格避免前导零

我的建议是:

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;
        }
    }
}
String decimalChars=“123456789”;
布尔拒绝=true,hasZeros=false;
for(int i=0;i
使用它,您可以通过选中
reject
来拒绝错误的输入。当代码找到小数字符数组中的字符时,代码将中断。
reject
如果之前找到零,则为true,否则为false。此代码在开始处还允许空格,并且不会拒绝之类的输入de>0000
。空字符串也将被拒绝,因为
reject
初始化为true


我希望这有帮助!

你能用正则表达式检查前导0
s
吗?它必须解释多个前导0吗?例如,
0050
。此外,前导空格或类似的东西呢?在我的情况下,前导空格是允许的,但是一个或多个前导零
0050
应该是@Sh的可能的副本据我所知,这是一个完全不同的问题。这应该是答案,regex太重了。很简单。感谢这一点-我是Java新手,才刚刚开始意识到像
startsWith
这样的东西实际上是存在的…但这不会再吸引评论中注意到的主要空白,应该被忽略修剪。
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;
        }
    }
}