2013-04-25 38 views
31

Trong Java, tôi muốn kiểm tra xem Chuỗi có tồn tại trong một List<String> myList hay không.Java, trả về nếu Danh sách chứa Chuỗi

Something như thế này:

if(myList.contains("A")){ 
    //true 
}else{ 
    // false 
} 

Vấn đề là myList thể chứa dữ liệu un-tỉa:

{' A', 'B ', ' C '} 

tôi muốn nó trở thành sự thật nếu mục của tôi 'B' có trong danh sách. Làm thế nào tôi nên làm điều này? Tôi muốn tránh một cấu trúc vòng lặp.

+0

AFAIK trong vanilla JDK, không. Tôi đoán trong Java 8 với bao đóng, bạn sẽ đạt được điều này trong một dòng. –

+0

làm cách nào để đạt được điều đó. mà không cần viết điều kiện vòng lặp. Trong thực tế, nó kiểm tra mỗi chuỗi nội bộ. nhưng tôi muốn nó trong một dòng;) – Reddy

+0

Như tôi đã nói, bạn không thể đạt được điều này ** trong một dòng ** đơn giản với Java đơn giản. Có những thư viện giúp bạn thực hiện công việc này. –

Trả lời

33

Bạn cần phải lặp danh sách của bạn và gọi String#trim để tìm kiếm:

String search = "A"; 
for(String str: myList) { 
    if(str.trim().contains(search)) 
     return true; 
} 
return false; 

HOẶC nếu bạn muốn thực hiện bỏ qua trường hợp tìm kiếm, sau đó sử dụng:

search = search.toLowerCase(); // outside loop 

// inside the loop 
if(str.trim().toLowerCase().contains(search)) 
4
String search = "A"; 
for(String s : myList) 
    if(s.contains(search)) return true; 
return false; 

Điều này sẽ lặp qua từng chuỗi trong danh sách và kiểm tra xem chuỗi đó có chứa chuỗi bạn đang tìm kiếm hay không. Nếu đó chỉ là khoảng trống bạn muốn bẫy, bạn có thể thực hiện việc này:

String search = "A"; 
for(String s : myList) 
    if(s.replaceAll(" ","").contains(search)) return true; 
return false; 

trước tiên sẽ thay thế khoảng trống bằng các chuỗi trống trước khi tìm kiếm. Ngoài ra, nếu bạn chỉ muốn cắt chuỗi đầu tiên, bạn có thể làm:

String search = "A"; 
for(String s : myList) 
    if(s.trim().contains(search)) return true; 
return false; 
2

Bạn có thể sử dụng thư viện đối sánh chuỗi gần đúng để thực hiện việc này, ví dụ SecondString, nhưng điều đó gần như chắc chắn là quá mức cần thiết - chỉ cần sử dụng một trong các câu trả lời cho vòng lặp được cung cấp thay thế.

14

Bạn có thể làm điều đó trong một dòng duy nhất bằng cách sử dụng regex:

if (myList.toString().matches(".*\\bA\\b.*")) 

Mã này nên thực hiện khá tốt.


BTW, bạn có thể xây dựng các regex từ một biến, như thế này:

.matches("\\[.*\\b" + word + "\\b.*]") 

tôi thêm [] để mỗi đầu để ngăn chặn một trận dương tính giả khi thuật ngữ tìm kiếm có chứa một mở/đóng ngoặc vuông ở đầu/cuối.

2

Hãy thử điều này:

for(String str: myList) { 
    if(str.trim().equals("A")) 
     return true; 
} 
return false; 

Bạn cần phải sử dụng str.equals hoặc str.equalsIgnoreCase thay vì containscontains trong string làm việc không giống như contains trong List

List<String> s = Arrays.asList("BAB", "SAB", "DAS"); 
s.contains("A"); // false 
"BAB".contains("A"); // true 
27

Với Java 8 Suối API:

List<String> myList = Arrays.asList(" A", "B ", " C "); 
return myList.stream().anyMatch(str -> str.trim().equals("B")); 
Các vấn đề liên quan