2013-03-01 56 views
5

Tôi có một chương trình yêu cầu người dùng nhập một chuỗi ba ký tự. Chuỗi chỉ có thể là tổ hợp của a, b hoặc c.Cách kiểm tra xem chuỗi có chứa các ký tự khác với các ký tự được chỉ định hay không. (trong Java)

Làm cách nào để kiểm tra xem chuỗi có chứa bất kỳ ký tự nào khác so với các ký tự được chỉ định mà không làm một triệu câu lệnh có điều kiện hay không.

Pseudo dụ:

String s = "abq" 

if (s.containsOtherCharacterThan(a,b,c)) 
    System.exit(-1) 
+3

Bạn có yêu cầu chúng tôi làm bài tập về nhà của bạn không ?? – Marshmellow1328

+0

Sử dụng regex để đạt được điều đó. –

+0

đây không phải là câu hỏi thực sự? nó chỉ là những gì tôi đang tìm kiếm – J3STER

Trả lời

8

Để tìm kiếm ký tự không được a, b, hoặc c, sử dụng giống như sau:

if(!s.matches("[abc]+")) 
{ 
    System.out.println("The string you entered has some incorrect characters"); 
} 
+0

Cảm ơn bạn rất nhiều. –

+0

Thực sự bạn là regex mà dường như không thành công. 'System.out.println (" abq ".matches (" [^ abc] "));' đã cho tôi 'false', nơi mà nó nên có' true'. – SudoRahul

+0

@Indigenuity - 'System.out.println (" abq ".matches (" [^ abc] + "));' vẫn cho 'sai'. Tôi không muốn nghe EVIL, nhưng vì câu trả lời này đã được chấp nhận, bạn nên đưa ra giải pháp làm việc, vì những người khác có thể tham khảo nó. Tôi đề nghị bạn chạy mã trong IDE của bạn và dán nó từ đó. – SudoRahul

1

Bạn có thể sử dụng biểu thức chính quy này: - [abc]+.

+0

Biểu thức chính quy đó sẽ vượt qua trường hợp kiểm tra lỗi của nó 'abq'. – Stobor

+0

Tôi thực sự nghi ngờ điều đó. 'abq' sẽ không khớp với mẫu' [abc] + '. – SudoRahul

+0

'[abc] +' sẽ khớp với 'ab' từ' abq', vì vậy '" abq ".match (" [abc] + ")' sẽ trả về 'true' EDIT I ​​đứng sửa. Bạn đang đúng – Indigenuity

4

Bạn có thể sử dụng regex và character classes. Chỉ cần gọi String#matches(String regex) trên chuỗi bạn muốn kiểm tra xem nó có thể được khớp hoàn toàn bằng regex hay không.

if (!s.matches("[abc]+")) {//.. 

kiểm tra này phải vượt qua chỉ chuỗi cũng chứa các ký tự khác thì quy định tại [] nên "abq" nên vượt qua nó vì nó chứa q. Trận đấu sẽ kiểm tra xem s chỉ chứa a, bc ký tự. Nếu không, nó sẽ trả lại false và nhờ vào phủ định chúng tôi sẽ nhập nếu chặn.

+1

Tôi không phải là giỏi nhất ở regex, nhưng tôi nghĩ rằng điều này sẽ chỉ cho bạn biết nếu KHÔNG có các ký tự là các ký tự được cho phép. – Indigenuity

+0

@Indigenuity là đúng - biểu thức chính quy đó sẽ vượt qua ví dụ thất bại 'abq'. – Stobor

+0

Tôi đã chỉnh sửa. Bạn đang ở bên phải – Indigenuity

1

Một cách mà không regex sẽ được lặp qua chuỗi và kiểm tra từng nhân vật, thoát nếu ký tự là bất cứ thứ gì trừ a, b hoặc c. Không có cách nào để làm điều đó chỉ với String.contains

2

Bạn có thể chia chuỗi thành một mảng và lặp qua đầu vào từ đó bạn có thể so sánh từng ký tự.

public boolean containsOtherCharacter(String s, String a, String b, String c) { 
    String[] st = s.split(""); 
    for(int x = 0; x < st.length; x++) 
     if (st[x].compareTo(a) != 0 && st[x].compareTo(b) != 0 && st[x].compareTo(c) != 0) 
      return true; 
    return false; 
} 

Điều này sẽ cho bạn biết nếu có bất kỳ ký tự nào khác. Nếu bạn muốn biết họ là nhân vật nào, bạn có thể chèn từng ký tự vào một HashMap trong đó khóa là ký tự và giá trị là số lần nó được sử dụng.

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