回答:
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)
スローされますStringIndexOutOfBoundsException
。startsWith
この問題はありません。
条件全体を1行にし、長さのチェックを回避するには、正規表現を次のように変更します。
s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")
プログラムのタイトループに条件が表示されない場合、正規表現を使用することによるわずかなパフォーマンスヒットは目立ちません。
((null!=s) && Character.isDigit(s.charAt(0)) )
)か、次のようなトリックを使用できますCharacter.isDigit((s?s:"X").charAt(0))
正規表現は非常に強力ですが、高価なツールです。最初の文字が数字であるかどうかをチェックするためにそれらを使用することは有効ですが、それほどエレガントではありません:)私はこの方法を好みます:
public boolean isLeadingDigit(final String value){
final char c = value.charAt(0);
return (c >= '0' && c <= '9');
}
function
Javaではありません。2)これはアラビア数字のみを許可し、中国語、インドなどは許可しません。それはあなたが好むかもしれませんが、質問では指定されていません。3)私は4年前の私の回答でこの正確なソリューションをすでにカバーしました。
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");
}
{1,1}
接尾辞は必要ありません。つまり、「前のパターンは1〜1回出現する必要があります」ということです。これは、パターンが単独で行うのとまったく同じことを意味します。
私はこの質問に遭遇し、正規表現を使用しないソリューションで貢献することを考えました。
私の場合、ヘルパーメソッドを使用します。
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;
}
おそらくやり過ぎですが、できる限り正規表現は避けるようにしています。