用Java解析数字

用Java解析数字,java,scanf,Java,Scanf,我有一个字符串,我假设它是一个6位整数的零填充表示,例如: "001234" 我想把它解析成一个长对象,但我想检查它的格式是否完全相同;我想返回错误,如果它不是长度6,不是零填充,等等 在C语言中,我会使用scanf的一些变体。Java的方式是什么?你的意思是要像这样检查长度吗 if (text.length() != 6) 你是说你想检查一下长度吗 if (text.length() != 6) 我将在regexp中进行字符串验证。 如果是有效的,那么我将使用Long.parseLong

我有一个字符串,我假设它是一个6位整数的零填充表示,例如:

"001234"
我想把它解析成一个长对象,但我想检查它的格式是否完全相同;我想返回错误,如果它不是长度6,不是零填充,等等


在C语言中,我会使用scanf的一些变体。Java的方式是什么?

你的意思是要像这样检查长度吗

if (text.length() != 6)

你是说你想检查一下长度吗

if (text.length() != 6)

我将在regexp中进行字符串验证。
如果是有效的,那么我将使用
Long.parseLong

在regexp中进行字符串验证。
如果有效,我将使用
Long。parseLong
Long#parseLong
将为您提供大部分帮助。只需检查is有六个数字,并且结果是肯定的。只能用0填充它(因为这样解析就会失败)。

Long\parseLong
将为您提供大部分方法。只需检查is有六个数字,并且结果是肯定的。只能用0填充它(因为这样解析将失败)。

此代码段可能会对您有所帮助。

   String test = "001234";
    long correctValue = 0;
    if (test.charAt(0) == '0' || test.length() != 6) {
        System.out.println("padded or incorrect length");

    } else {
               correctValue = Long.parseLong(test);             
    }
    System.out.println(correctValue);

此代码段可能会对您有所帮助。

   String test = "001234";
    long correctValue = 0;
    if (test.charAt(0) == '0' || test.length() != 6) {
        System.out.println("padded or incorrect length");

    } else {
               correctValue = Long.parseLong(test);             
    }
    System.out.println(correctValue);

试试看,诀窍是Long.parseLong不接受尾随空格或前导空格,而是接受前导零,因此只需检查长度是否为6

String input = "001234";
if (input.length() != 6) {
    throw new IllegalArgumentException(input);
}
long l = Long.parseLong(input);

实际上它接受非零填充的“123456”,但我认为它符合您的要求

试试看,诀窍是Long.parseLong不接受尾随空格或前导空格,而是接受前导零,因此只需检查长度是否为6

String input = "001234";
if (input.length() != 6) {
    throw new IllegalArgumentException(input);
}
long l = Long.parseLong(input);

实际上它接受非零填充的“123456”,但我认为它符合您的要求

Aleksander Blomskøld答案的变体:

Pattern allDigits = Pattern.compile("^\d{6}$");
if (!allDigits.matcher(s).matches()) 
    throw new IllegalArgumentException("Input is not numeric: " + s);
long val = Long.parseLong(s);

Aleksander Blomskøld答案的变体:

Pattern allDigits = Pattern.compile("^\d{6}$");
if (!allDigits.matcher(s).matches()) 
    throw new IllegalArgumentException("Input is not numeric: " + s);
long val = Long.parseLong(s);


长,长。但它并没有给我想要的一切。我可以使用正则表达式,但看起来有点过头了。@RS。。你担心长度吗?只需在解析之前检查字符串的长度。你是对的。这里真的不需要Regex.Long.parseLong。但它并没有给我想要的一切。我可以使用正则表达式,但看起来有点过头了。@RS。。你担心长度吗?只需在解析之前检查字符串的长度。你是对的。这里真的不需要正则表达式,不需要模式匹配。Long#parseLong负责这件事。但是您可能需要检查
-
。我添加了模式匹配以显示如何显式执行检查。实际上,您可能会丢失第一个if,并将其放入正则表达式:“^[0-9]{6}$”。不需要模式匹配。Long#parseLong负责这件事。但是您可能需要检查
-
。我添加了模式匹配以显示如何显式执行检查。实际上,您可能会丢失第一个if,并将其放在正则表达式中:“^[0-9]{6}$”。我在必要时将其作为填充读取。123456不需要它。好的,也许我解释错了。谢谢你的更正:)我已经编辑了我的答案,必要时我会把它读成填充的。123456不需要它。好的,也许我解释错了。谢谢你的更正:)我已经编辑了我的答案+1以使用整数。六位数不需要太长。可能要检查它是否也是正的(取决于需求)oops将使用Long以防万一您可能是指
IllegalArgumentException
而不是
IllegalAccessException
+1来使用整数。六位数不需要太长。可能也要检查它是否为正(取决于需求)oops将使用Long以防万一您可能指的是
IllegalArgumentException
而不是
IllegalAccessException