2009-07-10 33 views
40

Tôi có một chuỗi chứa ký tự chữ và số.Làm cách nào để kiểm tra chuỗi bắt đầu bằng số?

Tôi cần kiểm tra xem chuỗi có bắt đầu bằng số hay không.

Cảm ơn,

+1

hmmm, bạn có thể cụ thể hơn không? Câu trả lời chủ yếu chỉ là kiểm tra char đầu tiên. Bạn muốn loại số nào? Những câu trả lời này sẽ không hoạt động với số âm! Ngoài ra, bạn muốn gì sau số ... bất cứ điều gì? – Tom

+0

Có ... ý của bạn là "số" hoặc "chữ số" ... bây giờ tôi đang bối rối ... mọi người dường như nghĩ rằng con số có nghĩa là chữ số ...:: thở dài :: – Tom

+0

Đó là một điểm tốt. Tôi nghĩ anh ta có nghĩa là chữ số. NẾU anh ta có nghĩa là con số thì bạn chắc chắn sẽ muốn regex. –

Trả lời

68

Xem isDigit(char ch) phương pháp:

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Character.html

và vượt qua nó để ký tự đầu tiên của chuỗi bằng cách sử dụng phương pháp String.charAt().

Character.isDigit(myString.charAt(0)); 
+7

Chỉ cần cho đầy đủ: isDigit trả về đúng không chỉ 0..9 nhưng cũng khác (ví dụ như arabic) chữ số là tốt: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Character .html # isDigit (char) –

+0

cũng như hầu hết các phương thức được đặt tên làXXX(). Tôi nghĩ rằng đó là tiềm ẩn trong tên phương pháp và có thể được tìm thấy bằng cách nhìn vào liên kết đến phương pháp mà tôi đã cung cấp ... – Jon

+0

@Csaba_H - FYI: 0-9 là chữ số Ả Rập - nhưng tôi nhận được quan điểm của bạn. – McDowell

1
System.out.println(Character.isDigit(mystring.charAt(0)); 

EDIT: Tôi tìm kiếm tài liệu java, nhìn phương pháp trên lớp chuỗi mà có thể làm cho tôi 1 nhân vật & nhìn phương pháp trên lớp nhân vật để xem nếu nó có phương pháp nào để kiểm tra một điều như vậy.

Tôi nghĩ, bạn có thể làm tương tự trước khi yêu cầu.

EDI2: Ý tôi là, hãy thử làm mọi thứ, đọc/tìm & nếu bạn không thể tìm thấy bất cứ điều gì - hãy hỏi.
Tôi đã nhầm lẫn khi đăng nó lần đầu tiên. isDigit là một phương thức tĩnh trên lớp Character.

+0

Đề xuất tốt. 1 cho điều đó. –

15

Rất tiếc, tôi không thấy thẻ Java của bạn, chỉ đọc câu hỏi. Tôi sẽ để lại câu trả lời khác của tôi ở đây anyway kể từ khi tôi đã gõ chúng ra.

Java

String myString = "9Hello World!"; 
if (Character.isDigit(myString.charAt(0))) 
{ 
    System.out.println("String begins with a digit"); 
} 

C++:

string myString = "2Hello World!"; 

if (isdigit(myString[0])) 
{ 
    printf("String begins with a digit"); 
} 

biểu hiện thường xuyên:

\b[0-9] 

Một số bằng chứng của tôi regex hoạt động: Trừ khi dữ liệu thử nghiệm của tôi là sai? alt text http://i29.tinypic.com/15z5pw8.png

+0

Brock: OP đã thêm thẻ java (không được chỉ định trong câu hỏi). – shahkalpesh

+0

Có lẽ bây giờ tôi đã sửa câu trả lời của tôi, người xuống bình chọn tôi sẽ xem xét lại? –

+1

Tôi tin rằng regex là sai. Không phải vì những lý do tôi đưa ra câu trả lời của tôi (bởi vì tôi không chắc mình đúng, bởi vì nó phụ thuộc vào những gì OP dự định ... anh ấy cần làm rõ), nhưng vì \ b. \ b là một ranh giới từ. Bạn muốn buộc chữ số ở đầu chuỗi, vì vậy bạn nên sử dụng ^. – Tom

5

này nên làm việc:

String s = "123foo"; 
Character.isDigit(s.charAt(0)); 
10

Tôi nghĩ rằng bạn nên sử dụng một regex:


import java.util.regex.*; 

public class Test { 
    public static void main(String[] args) { 
    String neg = "-123abc"; 
    String pos = "123abc"; 
    String non = "abc123"; 
     /* I'm not sure if this regex is too verbose, but it should be 
     * clear. It checks that the string starts with either a series 
     * of one or more digits... OR a negative sign followed by 1 or 
     * more digits. Anything can follow the digits. Update as you need 
     * for things that should not follow the digits or for floating 
     * point numbers. 
     */ 
    Pattern pattern = Pattern.compile("^(\\d+.*|-\\d+.*)"); 
    Matcher matcher = pattern.matcher(neg); 
    if(matcher.matches()) { 
     System.out.println("matches negative number"); 
    } 
    matcher = pattern.matcher(pos); 
    if (matcher.matches()) { 
     System.out.println("positive matches"); 
    } 
    matcher = pattern.matcher(non); 
    if (!matcher.matches()) { 
     System.out.println("letters don't match :-)!!!"); 
    } 
    } 
} 

Bạn có thể muốn điều chỉnh này để chấp nhận số dấu chấm động, nhưng điều này sẽ làm việc cho âm bản. Các câu trả lời khác sẽ không có tác dụng đối với các từ phủ định vì chúng chỉ kiểm tra ký tự đầu tiên! Cụ thể hơn về nhu cầu của bạn và tôi có thể giúp bạn điều chỉnh cách tiếp cận này.

+0

http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html – Johan

+5

Đó là một giải pháp hết sức phức tạp cho "là ký tự đầu tiên có chữ số" – skaffman

+0

+1 câu hỏi không rõ ràng và không chỉ rõ "là ký tự đầu tiên có chữ số" – Pablojim

Các vấn đề liên quan