ใน 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 ทุกครั้งที่ทำได้