ใน Java มีวิธีค้นหาว่าอักขระตัวแรกของสตริงเป็นตัวเลขหรือไม่?
วิธีหนึ่งคือ
string.startsWith("1")และทำด้านบนจนครบ 9 แต่ดูเหมือนจะไม่มีประสิทธิภาพมาก
ใน Java มีวิธีค้นหาว่าอักขระตัวแรกของสตริงเป็นตัวเลขหรือไม่?
วิธีหนึ่งคือ
string.startsWith("1")และทำด้านบนจนครบ 9 แต่ดูเหมือนจะไม่มีประสิทธิภาพมาก
คำตอบ:
Character.isDigit(string.charAt(0))โปรดทราบว่าสิ่งนี้จะอนุญาตให้มีตัวเลข Unicode ใด ๆไม่ใช่แค่ 0-9 คุณอาจต้องการ:
char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');หรือโซลูชัน regex ที่ช้าลง:
s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")อย่างไรก็ตามด้วยวิธีการเหล่านี้ก่อนอื่นคุณต้องแน่ใจว่าสตริงไม่ว่างเปล่า ถ้าเป็นcharAt(0)และsubstring(0, 1)จะโยนStringIndexOutOfBoundsException. startsWithไม่มีปัญหานี้
ในการทำให้เงื่อนไขทั้งหมดเป็นบรรทัดเดียวและหลีกเลี่ยงการตรวจสอบความยาวคุณสามารถเปลี่ยนนิพจน์ทั่วไปดังต่อไปนี้:
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) ฉันได้กล่าวถึงคำตอบที่แน่นอนนี้แล้วในคำตอบของฉันเมื่อสี่ปีก่อน
                    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;
}น่าจะเป็น overkill แต่ฉันพยายามหลีกเลี่ยง regex ทุกครั้งที่ทำได้