2012-02-02 41 views
21

Given:Làm cách nào để xác minh rằng một chuỗi các chuỗi có chứa một chuỗi nhất định?

String[] directions = {"UP","DOWN","RIGHT","LEFT","up","down","right","left"}; 

String input = "Up"; 

Làm thế nào tôi có thể xác minh rằng một đầu vào từ stdin nằm trong mảng directions hay không?

Tôi có thể tạo vòng lặp và kiểm tra từng mục bằng input bằng cách sử dụng bình đẳng, nhưng tôi đang tìm kiếm một cách thanh lịch hơn.

Kính trọng, Ron

+1

Bạn có tìm kiếm luồng lưu trữ trước khi đăng câu hỏi không? [liên kết] http://stackoverflow.com/questions/1128723/in-java-how-can-i-test-if-an-array-contains-a-certain-value) – eternaln00b

Trả lời

38

Chuyển đổi mảng hướng hợp lệ vào một danh sách:

List valid = Arrays.asList(directions) 

Hoặc chỉ cần khai báo nó trực tiếp như:

List valid = Arrays.asList("UP", "DOWN", "RIGHT", "LEFT", "up", "down", "right", "left") 

Sau đó, bạn có thể sử dụng phương pháp contains:

if (valid.contains(input)) { 
    // is valid 
} else { 
    // not valid 
} 

Lưu ý rằng điều này sẽ không phù hợp với một trường hợp đầu vào hỗn hợp chẳng hạn như "Up", do đó bạn có thể muốn để lưu trữ các giá trị chỉ viết hoa trong danh sách và sau đó sử dụng valid.contains(input.toUpperCase())

+0

Tôi muốn bỏ qua mảng, qua việc tạo Danh sách mới chỉ để lặp lại trên đó ... – dantuch

+0

Câu hỏi dành cho mọi người - ai cũng biết tại sao Java không có phương thức Arrays.indexOf()? (để song song List.indexOf()). Kể từ khi mảng Strings thường là một số điều cuối cùng tĩnh, tôi tìm thấy việc chuyển đổi vào một Danh sách rất khó chịu, vì vậy tôi thường viết tiện ích tìm kiếm tuyến tính nhỏ của riêng tôi. – user949300

+0

@ user949300 - sử dụng ArrayList() –

3

Sử dụng ArrayList để thay thế và phương pháp contains

5

Chuyển đổi mảng của bạn thành Danh sách và sử dụng phương thức contains.

List mylist = Arrays.asList(directions); 
mylist.contains(input); 

chứa trở về phương pháp:

đúng nếu danh sách chứa các yếu tố quy định.

3

Thật không may, Java không có phương thức Arrays.indexOf(). Đặt cược tốt nhất của bạn là viết một tiện ích nhỏ để thực hiện tìm kiếm tuyến tính đơn giản. Hoặc bạn có thể chuyển đổi thành một ArrayList (xem Arrays.asList()) và gọi indexOf() or contains().

Nếu mảng lớn và tốc độ là một mối quan tâm, bạn có thể sắp xếp mảng, và sau đó sử dụng Arrays.binarySearch().

0

Kể từ khi chúng ta đang nói cụ thể về mảng các chuỗi, không chỉ bất kỳ mảng: một cách tiếp cận mà giải quyết trường hợp câu hỏi-nhạy cảm thanh lịch sẽ được sử dụng biểu thức thông thường. Hoặc là thông qua lớp Pattern hoặc của chuỗi matches method.

if (input.matches("(?i)" + String.join("|", directions))) { 
    // valid 
} 
else { 
    // invalid 
} 
Các vấn đề liên quan