我有一个字符串,我假设它是 6 位整数的零填充表示,例如:
"001234"
我想将其解析为 Long 对象,但我想检查它的格式是否完全相同;如果长度不是 6、不是零填充等,我想返回错误。
在 CI 中会使用 scanf 的一些变体。什么是Java方式?
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);
此代码段可能会对您有所帮助。
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);
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);
试试这个,诀窍是 Long.parseLong 不接受任何尾随或前导空格,但接受前导零,因此您只需要检查长度 = 6
String input = "001234";
if (input.length() != 6) {
throw new IllegalArgumentException(input);
}
long l = Long.parseLong(input);
实际上它接受一个非零填充的“123456”,但我认为它符合您的要求。
我会在正则表达式中进行字符串验证。如果有效,我会使用Long.parseLong
Long#parseLong
会得到你大部分的方式。只需检查它有六位数字,并且结果是肯定的。它不能用除 0 以外的任何东西填充(因为那样解析将失败)。
你的意思是你想检查长度
if (text.length() != 6)