Di Java, apakah ada cara untuk mengetahui apakah karakter pertama dari sebuah string adalah angka?
Salah satunya adalah
string.startsWith("1")
dan melakukan semua hal di atas hingga 9, tetapi tampaknya sangat tidak efisien.
Di Java, apakah ada cara untuk mengetahui apakah karakter pertama dari sebuah string adalah angka?
Salah satunya adalah
string.startsWith("1")
dan melakukan semua hal di atas hingga 9, tetapi tampaknya sangat tidak efisien.
Jawaban:
Character.isDigit(string.charAt(0))
Perhatikan bahwa ini akan mengizinkan digit Unicode apa pun , tidak hanya 0-9. Anda mungkin lebih suka:
char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');
Atau solusi regex yang lebih lambat:
s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")
Namun, dengan salah satu metode ini, Anda harus terlebih dahulu memastikan bahwa string tidak kosong. Jika ya, charAt(0)dan substring(0, 1)akan melempar StringIndexOutOfBoundsException. startsWithtidak punya masalah ini.
Untuk membuat seluruh ketentuan satu baris dan menghindari pemeriksaan panjang, Anda dapat mengubah ekspresi reguler sebagai berikut:
s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")
Jika kondisi tidak muncul dalam loop yang ketat dalam program Anda, performa kecil yang dicapai untuk menggunakan ekspresi reguler kemungkinan tidak akan terlihat.
((null!=s) && Character.isDigit(s.charAt(0)) )) atau menggunakan trik sepertiCharacter.isDigit((s?s:"X").charAt(0))
Ekspresi reguler adalah alat yang sangat kuat tetapi mahal. Ini valid untuk digunakan untuk memeriksa apakah karakter pertama adalah digit tetapi tidak begitu elegan :) Saya lebih suka cara ini:
public boolean isLeadingDigit(final String value){
final char c = value.charAt(0);
return (c >= '0' && c <= '9');
}
functionbukan Java. 2) Ini hanya mengizinkan angka Arab, bukan Cina, India, dll. Itu mungkin yang Anda sukai, tetapi tidak ditentukan dalam pertanyaan. 3) Saya sudah membahas solusi tepat ini dalam jawaban saya empat tahun lalu.
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}sufiks, yang berarti "pola sebelumnya harus muncul antara 1 dan 1 kali". Ini berarti persis sama dengan pola itu sendiri.
Saya baru saja menemukan pertanyaan ini dan berpikir untuk berkontribusi dengan solusi yang tidak menggunakan regex.
Dalam kasus saya, saya menggunakan metode helper:
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;
}
Mungkin berlebihan, tapi saya mencoba menghindari regex kapan pun saya bisa.