2011-11-23 89 views
54

Tôi cần một phương pháp có thể cho tôi biết nếu một Chuỗi có ký tự không phải là chữ số hay không.Làm cách nào để xác định xem một Chuỗi có ký tự không phải là chữ và số không?

Ví dụ: nếu chuỗi là "abcdef?" hoặc "abcdefà", phương thức phải trả về true.

+1

http://stackoverflow.com/questions/1795402/java-check-a-string-if-there-is-a-special-character-in-it –

+0

http://stackoverflow.com/questions/11241690/regex-for-checking-nếu-một-chuỗi-là-đúng-chữ và số – treecoder

Trả lời

115

Sử dụng Apache Commons Lang:

!StringUtils.isAlphanumeric(String) 

Alternativly lặp trên ký tự Chuỗi và kiểm tra với:

!Character.isLetterOrDigit(char) 

Bạn đã vẫn là một vấn đề còn lại: chuỗi ví dụ của bạn "abcdefà" là chữ và số, kể từ à là một chữ cái. Nhưng tôi nghĩ bạn muốn nó được coi là không phải chữ số, đúng không ?!

Vì vậy, bạn có thể muốn sử dụng biểu thức chính quy thay vì:

String s = "abcdefà"; 
Pattern p = Pattern.compile("[^a-zA-Z0-9]"); 
boolean hasSpecialChar = p.matcher(s).find(); 
+5

Tôi muốn tránh việc nhập khẩu các thư viện bên ngoài nếu không thực sự cần thiết.Và có: Tôi muốn được coi là không phải là chữ và số – lugeno

4

Bạn phải đi qua từng nhân vật trong String và kiểm tra Character.isDigit(char); hoặc Character.isletter(char);

Ngoài ra, bạn có thể sử dụng regex.

+1

Ví dụ, "-1234" là một số, không phải là một chuỗi chữ số. Nhưng logic của bạn Character.isDigit sẽ trả về false cho "-". :( – Abhishek

1

Nếu bạn có thể sử dụng thư viện Apache Commons, thì Commons-Lang StringUtils có phương thức gọi là isAlphanumeric() để thực hiện những gì bạn đang tìm kiếm.

21

Một cách tiếp cận là để làm điều đó bằng cách sử dụng lớp String riêng của mình. Hãy nói rằng chuỗi của bạn là một cái gì đó như thế:

String s = "some text"; 
boolean hasNonAlpha = s.matches("^.*[^a-zA-Z0-9 ].*$"); 

một khác là sử dụng một thư viện bên ngoài, chẳng hạn như commons Apache:

String s = "some text"; 
boolean hasNonAlpha = !StringUtils.isAlphanumeric(s); 
+0

+1: regex là người chiến thắng tôi nghĩ vì OP không thực sự muốn kiểm tra anh ta muốn sth như 'hasSpecialCharacters (String)' với định nghĩa riêng của mình về "đặc biệt" –

+2

Điều đó sẽ không hoàn toàn hoạt động: 'String.matches (...)' trong Java kiểm tra nếu regex phù hợp với * toàn bộ * chuỗi. – ruakh

+1

Bạn nói đúng. Tôi đã sửa đổi regex – loscuropresagio

1

string.matches("^\\W*$"); nên làm những gì bạn muốn, nhưng nó không bao gồm khoảng trắng. string.matches("^(?:\\W|\\s)*$"); cũng khớp với khoảng trắng.

0

Bạn có thể sử dụng phương thức tĩnh isLetter (char c) của lớp Character trong Java.lang.

public boolean isAlpha(String s) { 
    char[] charArr = s.toCharArray(); 

    for(char c : charArr) { 
     if(!Character.isLetter(c)) { 
      return false; 
     } 
    } 
    return true; 
} 
1

Sử dụng chức năng này để kiểm tra xem một chuỗi là chữ và số:

public boolean isAlphanumeric(String str) 
{ 
    char[] charArray = str.toCharArray(); 
    for(char c:charArray) 
    { 
     if (!Character.isLetterOrDigit(c)) 
      return false; 
    } 
    return true; 
} 

nó tiết kiệm phải nhập thư viện bên ngoài và mã có thể dễ dàng được thay đổi, bạn nên sau đó muốn thực hiện kiểm tra xác nhận khác nhau trên dây .

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