0

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

"001234"

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

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

4

7 回答 7

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);
于 2012-12-26T11:16:46.173 回答
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);
于 2012-12-26T11:18:10.843 回答
1

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);
于 2012-12-27T11:22:59.997 回答
1

试试这个,诀窍是 Long.parseLong 不接受任何尾随或前导空格,但接受前导零,因此您只需要检查长度 = 6

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

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

于 2012-12-26T11:20:41.203 回答
0

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

于 2012-12-26T11:16:35.073 回答
0

Long#parseLong会得到你大部分的方式。只需检查它有六位数字,并且结果是肯定的。它不能用除 0 以外的任何东西填充(因为那样解析将失败)。

于 2012-12-26T11:16:45.900 回答
-1

你的意思是你想检查长度

if (text.length() != 6)
于 2012-12-26T11:16:33.993 回答