用Java解析数字

时间:2012-12-26 11:12:21

标签: java scanf

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

"001234"

我想将它解析为Long对象,但我想检查它是否完全相同;如果它不是长度为6,而不是零填充等,我想返回错误

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

7 个答案:

答案 0 :(得分:2)

if(s.length() != 6) 
    throw new IllegalArgumentException("Input is not of length 6: " + s);
Pattern allDigits = Pattern.compile( "[0-9]+" );
if(!allDigits.matcher(s).matches()) 
    throw new IllegalArgumentException("Input is not numeric: " + s);
long val = Long.parseLong(s);

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

试试这个,诀窍是Long.parseLong不接受没有尾随或前导空格,但是接受前导零,所以你只需要检查长度= 6

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

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

答案 3 :(得分:1)

AleksanderBlomskø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);

答案 4 :(得分:0)

我会在正则表达式中进行字符串验证。 如果有效,那么我会使用Long.parseLong

答案 5 :(得分:0)

Long#parseLong可以帮到你。只需检查它是否有六位数,结果是正数。除了0之外,它不能用其他任何东西填充(因为那时解析将失败)。

答案 6 :(得分:-1)

你的意思是你想检查长度

if (text.length() != 6)