Java'da bir dizenin ilk karakterinin sayı olup olmadığını öğrenmenin bir yolu var mı?
Tek yol
string.startsWith("1")
ve yukarıdakileri 9'a kadar yapın, ancak bu çok verimsiz görünüyor.
Java'da bir dizenin ilk karakterinin sayı olup olmadığını öğrenmenin bir yolu var mı?
Tek yol
string.startsWith("1")
ve yukarıdakileri 9'a kadar yapın, ancak bu çok verimsiz görünüyor.
Yanıtlar:
Character.isDigit(string.charAt(0))
Bunun yalnızca 0-9'a değil, herhangi bir Unicode rakamına izin vereceğini unutmayın . Şunları tercih edebilirsiniz:
char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');
Veya daha yavaş normal ifade çözümleri:
s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")
Bununla birlikte, bu yöntemlerden herhangi biriyle, önce dizenin boş olmadığından emin olmalısınız. Eğer öyleyse charAt(0)ve substring(0, 1)bir StringIndexOutOfBoundsException. startsWithbu sorunu yok.
Tüm koşulu tek satır yapmak ve uzunluk kontrollerinden kaçınmak için normal ifadeleri aşağıdaki şekilde değiştirebilirsiniz:
s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")
Koşul, programınızda sıkı bir döngüde görünmüyorsa, normal ifadeleri kullanmak için küçük performans darbesi muhtemelen fark edilmez.
((null!=s) && Character.isDigit(s.charAt(0)) )) Veya aşağıdaki gibi hileler kullanabilirsinizCharacter.isDigit((s?s:"X").charAt(0))
Normal ifadeler çok güçlü ama pahalı bir araçtır. İlk karakterin rakam olup olmadığını kontrol etmek için kullanmak geçerli ama çok şık değil :) Bu şekilde tercih ediyorum:
public boolean isLeadingDigit(final String value){
final char c = value.charAt(0);
return (c >= '0' && c <= '9');
}
functionJava değildir. 2) Bu sadece Arap rakamlarına izin verir, Çince, Hintçe vb. Değil. Tercih ettiğiniz şey bu olabilir, ancak soruda belirtilmemiştir. 3) Bu kesin çözümü dört yıl önceki cevabımda zaten ele almıştım.
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}eke ihtiyacınız yoktur, yani "önceki kalıp 1 ile 1 kez görünmelidir" anlamına gelir. Bu, modelin kendi başına yaptığı ile tamamen aynı anlamına gelir.
Az önce bu soruyla karşılaştım ve regex kullanmayan bir çözümle katkıda bulunmayı düşündüm.
Benim durumumda yardımcı bir yöntem kullanıyorum:
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;
}
Muhtemelen aşırılık ama elimden geldiğince normal ifadeden kaçınmaya çalışıyorum.