Trong Java có cách nào để tìm xem ký tự đầu tiên của chuỗi có phải là số không?
Một cách là
string.startsWith("1")
và làm theo cách trên cho đến ngày 9, nhưng điều đó dường như không hiệu quả.
Trong Java có cách nào để tìm xem ký tự đầu tiên của chuỗi có phải là số không?
Một cách là
string.startsWith("1")
và làm theo cách trên cho đến ngày 9, nhưng điều đó dường như không hiệu quả.
Câu trả lời:
Character.isDigit(string.charAt(0))
Lưu ý rằng điều này sẽ cho phép bất kỳ chữ số Unicode nào , không chỉ 0-9. Bạn có thể thích:
char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');
Hoặc các giải pháp regex chậm hơn:
s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")
Tuy nhiên, với bất kỳ phương pháp nào trong số này, trước tiên bạn phải chắc chắn rằng chuỗi không trống. Nếu có, charAt(0)và substring(0, 1)sẽ ném một StringIndexOutOfBoundsException. startsWithkhông có vấn đề này.
Để đặt toàn bộ điều kiện thành một dòng và tránh kiểm tra độ dài, bạn có thể thay đổi regexes như sau:
s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")
Nếu điều kiện không xuất hiện trong một vòng lặp chặt chẽ trong chương trình của bạn, thì hiệu suất nhỏ khi sử dụng biểu thức chính quy có thể không đáng chú ý.
((null!=s) && Character.isDigit(s.charAt(0)) )) hoặc sử dụng thủ đoạn nhưCharacter.isDigit((s?s:"X").charAt(0))
Biểu thức chính quy là công cụ rất mạnh nhưng đắt tiền. Nó hợp lệ để sử dụng chúng để kiểm tra xem ký tự đầu tiên có phải là một chữ số hay không nhưng nó không quá thanh lịch :) Tôi thích cách này hơn:
public boolean isLeadingDigit(final String value){
final char c = value.charAt(0);
return (c >= '0' && c <= '9');
}
functionkhông phải là Java. 2) Điều này chỉ cho phép các chữ số Ả Rập, không cho phép Trung Quốc, Ấn Độ, v.v. Đó có thể là những gì bạn thích, nhưng nó không được chỉ định trong câu hỏi. 3) Tôi đã đề cập đến giải pháp chính xác này trong câu trả lời của tôi bốn năm trước.
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}hậu tố, có nghĩa là "mẫu trước phải xuất hiện từ 1 đến 1 lần". Điều này có nghĩa là hoàn toàn giống như mẫu tự nó làm.
Tôi vừa xem qua câu hỏi này và nghĩ về việc đóng góp một giải pháp không sử dụng regex.
Trong trường hợp của tôi, tôi sử dụng phương thức trợ giúp:
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;
}
Có lẽ là quá mức cần thiết, nhưng tôi cố gắng tránh regex bất cứ khi nào có thể.