0

私は、6桁の整数のゼロパディング表現であると仮定する文字列を持っています。

"001234"

それを Long オブジェクトに解析したいのですが、それがまったく同じ形式であることを確認したいのです。長さが6でない場合、ゼロが埋め込まれていない場合など、エラーを返したいと思います.

CIでは、scanfのいくつかのバリアントを使用します。Javaのやり方は?

4

7 に答える 7

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 に答える
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 に答える
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 に答える
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 に答える
0

正規表現で文字列の検証を行います。有効な場合、私が使用するよりもLong.parseLong

于 2012-12-26T11:16:35.073 に答える
0

Long#parseLongほとんどの方法であなたを得るでしょう。が 6 桁で、結果が正であることを確認してください。0 以外でパディングすることはできません (解析が失敗するため)。

于 2012-12-26T11:16:45.900 に答える
-1

のように長さを確認したいということですか?

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