2013-06-16 43 views
16

Vậy làm cách nào để bạn kiểm tra xem chuỗi có một từ cụ thể trong đó không?Để kiểm tra xem chuỗi có chứa từ cụ thể

Vì vậy, đây là mã của tôi:

a.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      if(d.contains("Hey")){ 
       c.setText("OUTPUT: SUCCESS!"); 
      }else{ 
       c.setText("OUTPUT: FAIL!"); 
      } 
     } 
    }); 

tôi nhận được một lỗi.

+0

Tìm hiểu về biểu thức thông thường (RegEx) để biết thêm. – Lingviston

+2

Phần kiểm tra có vẻ tốt. Lỗi là gì? –

+3

Lỗi là gì? 'D' là gì? 'C' là gì? –

Trả lời

28

Không phức tạp như họ nói, hãy kiểm tra điều này bạn sẽ không hối tiếc.

String sentence = "Check this answer and you can find the keyword with this code"; 
String search = "keyword"; 

if (sentence.toLowerCase().indexOf(search.toLowerCase()) != -1) { 

    System.out.println("I found the keyword"); 

} else { 

    System.out.println("not found"); 

} 

Bạn có thể thay đổi toLowerCase() nếu muốn.

+0

Cảm ơn bạn đã trả lời fthopkins.Đó là một câu hỏi cũ, nhưng tôi phải đối mặt với một tình huống tương tự ngày hôm nay tại nơi làm việc. Mã trên tìm kiếm từ khóa không phải từ. Ví dụ: - Nếu chúng tôi chỉ muốn bắt "từ khóa" và không phải bất kỳ tiện ích mở rộng nào như "từ khóa_1", mã ở trên sẽ không hoạt động. Một cách để tránh điều này có thể là tìm kiếm với String chứa hàm cho "từ khóa" (lưu ý hai khoảng trống ở hai bên) - có cách nào thanh lịch hơn để làm điều đó không? – JavaTec

+1

@JavaTec bạn sẽ cần sử dụng regex để tìm kiếm các từ đúng cách. Tương tự như câu trả lời của m0skit0 (và xem câu trả lời cho việc sử dụng các biểu thức đã biên dịch nếu bạn sử dụng cùng một biểu thức trên), bạn sẽ muốn làm điều này: 'if (d.matches (" \\ bkeyword \\ b ")) {/* success * /} '. '\ b' (' \\ b' trong chuỗi để thoát dấu gạch chéo ngược) khớp với "ranh giới từ", tức là các cạnh của từ. Lợi thế hơn khi sử dụng khoảng trắng là nó sẽ khớp đúng với những thứ như "câu với từ khóa". (dừng hoàn toàn thay vì không gian) hoặc thậm chí "từ khóa" (không có khoảng trống ở đầu hoặc cuối). –

+1

Cảm ơn @LoganPickup - tôi đã kết thúc bằng cách sử dụng '\\ b' (trở lại sau đó vào tháng 10) và nó hoạt động tốt. – JavaTec

4

Bạn có thể sử dụng biểu thức thông thường:

if (d.matches(".*Hey.*")) { 
    c.setText("OUTPUT: SUCCESS!"); 
} else { 
    c.setText("OUTPUT: FAIL!"); 
} 

.* -> 0 hoặc nhiều hơn của bất kỳ nhân vật

Hey -> Chuỗi bạn muốn

Nếu bạn sẽ được kiểm tra này thường xuyên, nó tốt hơn là biên dịch cụm từ thông dụng trong đối tượng Pattern và sử dụng lại cá thể Pattern để thực hiện việc kiểm tra.

private static final Pattern HEYPATTERN = Pattern.compile(".*Hey.*"); 
[...] 
if (HEYPATTERN.matcher(d).matches()) { 
    c.setText("OUTPUT: SUCCESS!"); 
} else { 
    c.setText("OUTPUT: FAIL!"); 
} 

Chỉ cần lưu ý điều này cũng sẽ phù hợp với "Heyburg" ví dụ vì bạn không nói rõ bạn đang tìm kiếm "Hey" như một từ độc lập. Nếu bạn chỉ muốn để phù hợp với Hey như một từ, bạn cần phải thay đổi regex để.*\\bHey\\b.*

+0

Ôi trời của tôi. Tôi quên d = b.getText(). ToString(); phần. – WhiplashOne

+0

Tôi đoán bạn đã cố gắng viết nhận xét này làm nhận xét ** về câu hỏi của bạn **. – m0skit0

+0

@ m0skit0 chúng ta có thể thực hiện việc này bằng cách bỏ qua trường hợp, tức là tôi muốn khớp nếu câu có chứa android/Android nó phải trả về true. –

9

.contains() là hoàn toàn hợp lệ và là một cách tốt để kiểm tra.

(http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#contains(java.lang.CharSequence))

Vì bạn đã không đăng các lỗi, tôi đoán d hoặc là null hoặc bạn đang nhận được "Không thể tham khảo một biến phi chính thức bên trong một lớp bên trong định nghĩa trong một phương pháp khác nhau" lỗi.

Để đảm bảo nó không phải là rỗng, trước tiên hãy kiểm tra null trong câu lệnh if. Nếu đó là lỗi khác, hãy đảm bảo rằng d được khai báo là final hoặc là biến thành viên của lớp học của bạn. Ditto cho c.

0
if (someString.indexOf("Hey")>=0) 
    doSomething(); 
1

Sử dụng chứa

String sentence = "Check this answer and you can find the keyword with this code"; 
String search = "keyword"; 

if (sentence.toLowerCase().contains(search.toLowerCase()) { 

    System.out.println("I found the keyword"); 

} else { 

    System.out.println("not found"); 

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