2009-08-03 40 views
103

Trong Java có cách nào để tìm hiểu xem ký tự đầu tiên của một chuỗi có phải là một số không?Làm cách nào để tìm hiểu xem ký tự đầu tiên của chuỗi có phải là một số không?

Một cách là

string.startsWith("1") 

và làm các việc trên tất cả các cách đến 9, nhưng điều đó có vẻ rất không hiệu quả.

+10

tôi sẽ đề cập đến cách regex, nhưng tôi sợ rằng nếu tôi đã làm, bạn sẽ bị cám dỗ để thử nó. –

Trả lời

250
Character.isDigit(string.charAt(0)) 

Lưu ý rằng this will allow any Unicode digit, 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:

s.substring(0, 1).matches("\\d") 
// or the equivalent 
s.substring(0, 1).matches("[0-9]") 

Tuy nhiên, với bất kỳ của những phương pháp này, trước tiên bạn phải chắc chắn rằng chuỗi là không có sản phẩm nào. Nếu có, charAt(0)substring(0, 1) sẽ ném một số StringIndexOutOfBoundsException. startsWith không có vấn đề này.

Để làm cho toàn bộ tình trạng một dòng và tránh kiểm tra chiều dài, bạn có thể thay đổi regexes như sau:

s.matches("\\d.*") 
// or the equivalent 
s.matches("[0-9].*") 

Nếu tình trạng này 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, đạt hiệu suất nhỏ để sử dụng cụm từ thông dụng không có khả năng đáng chú ý.

+0

wow. mọi người yêu thích upvoting bạn :) cảm ơn cho câu trả lời. – Omnipresent

+11

Tại sao không? Đó là chính xác * hai lần *. :) (Ngẫu nhiên, tôi khuyến khích bạn bỏ phiếu nhiều hơn, bỏ phiếu là một phần không thể tách rời của trang web này. Tôi thấy rằng bạn có 41 bài đăng nhưng chỉ có 19 phiếu trong 7 tháng.) –

+0

Ha, tôi sẽ cung cấp cho bạn một nửa phiếu bầu cho mỗi lần bạn đúng. – jjnguy

0
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"); 
} 
+2

Bạn không cần hậu tố' {1,1} ' , 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 chính xác giống như mô hình tự làm. –

+0

Giải pháp này không hoạt động vì String.matches và mẫu API cố gắng khớp với chuỗi hoàn chỉnh và không chỉ ký tự đầu tiên –

8

Cụm từ thông dụng là công cụ rất mạnh nhưng đắt tiền. Nó có giá trị sử dụng chúng để kiểm tra nếu ký tự đầu tiên là một chữ số nhưng nó không phải là quá tao nhã :) Tôi thích theo cách này:

public boolean isLeadingDigit(final String value){ 
    final char c = value.charAt(0); 
    return (c >= '0' && c <= '9'); 
} 
+10

1) 'hàm' không phải là Java. 2) Điều này chỉ cho phép chữ số Ả Rập, không phải tiếng 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. –

0

Tôi vừa bắt gặp câu hỏi này và nghĩ về góp phần với một giải pháp mà không không sử dụng regex.

Trong trường hợp của tôi, tôi sử dụng một phương pháp 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; 
} 

Có lẽ một overkill, nhưng tôi cố gắng tránh regex bất cứ khi nào tôi có thể.

0

Hãy thử mã này sẽ giúp bạn :)

import java.io.*; 

public class findDigit 
{ 
    public findDigit() 
    { 
      String line = "1Hello"; 
      String firstLetter = String.valueOf(line.charAt(0)); //line had 0 to 5 string index 
      char first = firstLetter.charAt(0); 
      /* 
      if (Character.isLetter(first)) //for alphabets 
      if (Character.isSpaceChar(first)) //for spaces 
      */ 
      if (Character.isDigit(first)) // for Digits 
      { 
       int number = Integer.parseInt(firstLetter); 
       System.out.println("This String has digit at first as: "+number); 
      } 
      else 
      { 
       System.out.println("This String has alphabet at first as: "+firstLetter); 
      } 

    } 

    public static void main(String args[]) 
    { 
     new findDigit(); 
    } 
} 
Các vấn đề liên quan