文字列の最初の文字が数字かどうかを確認するにはどうすればよいですか?


108

Javaでは、文字列の最初の文字が数字であるかどうかを確認する方法はありますか?

一つの方法は

string.startsWith("1")

上記のすべてを9まで行いますが、それは非常に非効率的です。


10
私は正規表現の方法について言及するつもりでしたが、私がそうした場合、あなたはそれを試してみたいと思うでしょう。
マイケルマイヤーズ

回答:


259
Character.isDigit(string.charAt(0))

これは 0-9だけでなく、あらゆる Unicode数字を許可することに注意してください。あなたが好むかもしれません:

char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');

または、より遅い正規表現ソリューション:

s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")

ただし、これらのメソッドのいずれかを使用する場合は、最初に文字列が空でないことを確認する必要があります。もしそうなら、charAt(0)そしてsubstring(0, 1)スローされますStringIndexOutOfBoundsExceptionstartsWithこの問題はありません。

条件全体を1行にし、長さのチェックを回避するには、正規表現を次のように変更します。

s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")

プログラムのタイトループに条件が表示されない場合、正規表現を使用することによるわずかなパフォーマンスヒットは目立ちません。


Re:「文字列が空でないことを最初に確認する必要があります」-trueであり、さらに-表示されているすべてのメソッドが例外をスローする場合と同様に、nullでないことも確認する必要があります。直接チェックする(例((null!=s) && Character.isDigit(s.charAt(0)) ))か、次のようなトリックを使用できますCharacter.isDigit((s?s:"X").charAt(0))
epeleg

8

正規表現は非常に強力ですが、高価なツールです。最初の文字が数字であるかどうかをチェックするためにそれらを使用することは有効ですが、それほどエレガントではありません:)私はこの方法を好みます:

public boolean isLeadingDigit(final String value){
    final char c = value.charAt(0);
    return (c >= '0' && c <= '9');
}

12
1)functionJavaではありません。2)これはアラビア数字のみを許可し、中国語、インドなどは許可しません。それはあなたが好むかもしれませんが、質問では指定されていません。3)私は4年前の私の回答でこの正確なソリューションをすでにカバーしました。
マイケルマイヤーズ

0
regular expression starts with number->'^[0-9]' 
Pattern pattern = Pattern.compile('^[0-9]');
 Matcher matcher = pattern.matcher(String);

if(matcher.find()){

System.out.println("true");
}

2
{1,1}接尾辞は必要ありません。つまり、「前のパターンは1〜1回出現する必要があります」ということです。これは、パターンが単独で行うのとまったく同じことを意味します。
アンジェイドイル

String.matchesとPattern APIは最初の文字だけでなく完全な文字列と一致しようとするため、このソリューションは機能しません
Amrish Pandey

0

私はこの質問に遭遇し、正規表現を使用しないソリューションで貢献することを考えました。

私の場合、ヘルパーメソッドを使用します。

public boolean notNumber(String input){
    boolean notNumber = false;
    try {
        // must not start with a number
        @SuppressWarnings("unused")
        double checker = Double.valueOf(input.substring(0,1));
    }
    catch (Exception e) {
        notNumber = true;           
    }
    return notNumber;
}

おそらくやり過ぎですが、できる限り正規表現は避けるようにしています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.