私は、6桁の整数のゼロパディング表現であると仮定する文字列を持っています。
"001234"
それを Long オブジェクトに解析したいのですが、それがまったく同じ形式であることを確認したいのです。長さが6でない場合、ゼロが埋め込まれていない場合など、エラーを返したいと思います.
CIでは、scanfのいくつかのバリアントを使用します。Javaのやり方は?
このコードスニペットが役立つ場合があります。
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);
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);
これを試してみてください。トリックは、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);
正規表現で文字列の検証を行います。有効な場合、私が使用するよりもLong.parseLong
Long#parseLong
ほとんどの方法であなたを得るでしょう。が 6 桁で、結果が正であることを確認してください。0 以外でパディングすることはできません (解析が失敗するため)。
のように長さを確認したいということですか?
if (text.length() != 6)