2013-01-24 34 views
6

Có cách nào khác để rút ngắn tình trạng này không?Một số đầu vào chuỗi cho một biến

if (oper.equals("add") || oper.equals("Add") || oper.equals("addition") || 
oper.equals("Addition") || oper.equals("+")) 

Tôi đã tự hỏi nếu có điều gì đó tôi có thể làm để 'tắt' điều này. Người dùng sẽ gõ một chuỗi khi được nhắc loại hoạt động nào sẽ được thực hiện trong chương trình máy tính đơn giản của tôi. Giáo sư của chúng tôi cho biết chương trình của chúng tôi nên chấp nhận liệu người dùng có nhập "thêm" hoặc "Thêm" vào thư thường hay không ... Hoặc là cách duy nhất tôi nên làm?

+1

lẽ ghép các từ thay thế trong một danh sách/mảng và làm một chứa()/vòng. Để cho phép viết hoa chữ cái, chỉ cần chuyển đổi tất cả đầu vào thành chữ thường (hoặc chữ hoa) trước khi phân tích cú pháp hoặc sử dụng equalsIgnoreCase, như được đề xuất bên dưới. – keyser

+3

'equalsIgnoreCase()' thay vì 'bằng()'? –

Trả lời

9

Bạn có thể sử dụng String#equalsIgnoreCase(String) trong bốn chuỗi 1: -

if (oper.equalsIgnoreCase("add") || 
    oper.equalsIgnoreCase("addition") || 
    oper.equals("+")) 

Nếu số chuỗi tăng lên, bạn sẽ được tốt hơn off với một List, và sử dụng phương pháp contains của nó. Nhưng chỉ với những đầu vào này, bạn chỉ có thể làm theo cách tiếp cận này.


Một cách khác để tiếp cận này là sử dụng String#matches(String) phương pháp, mà phải mất một regex: -

if (oper.matches("add|addition|[+]") 

Tuy nhiên, bạn không thực sự cần một regex cho việc này. Đặc biệt, phương pháp này có thể trở nên xấu xí cho các đầu vào lớn hơn. Nhưng, nó chỉ là một cách cho trường hợp này. Vì vậy, bạn có thể chọn một trong số họ. 1 là rõ ràng hơn để xem trên đi đầu tiên.


Ngoài ra, bạn cũng có thể sử dụng để lưu trữ enumoperators, và vượt qua nó là ví dụ ở khắp mọi nơi, chứ không phải là một string. Nó sẽ dễ dàng hơn để làm việc với. Enum sẽ trông như thế này:

public enum Operator { 
    ADD, 
    SUB, 
    MUL, 
    DIV; 
} 

Bạn có thể cải thiện nó theo nhu cầu thích hợp của bạn. Lưu ý rằng, vì bạn đang nhận được đầu vào của người dùng, trước tiên bạn sẽ cần phải xác định cá thể enum thích hợp dựa trên nó, và từ đó bạn có thể làm việc trên cá thể enum đó, chứ không phải là String.

+0

+1 Tôi thích phương pháp 'khác'. nó không phải là khó hiểu ('1 là rõ ràng hơn để xem trên đi đầu tiên.') –

+0

@NandkumarTekale .. Yeah right. Nhưng, trong trường hợp ai đó không thoải mái với 'Regex'. –

0

ném toàn bộ bit mã bên trong một hàm được gọi là: isOperationAddition(String s){...} trả về boolean.

Vì vậy, đây:

if (oper.equals("add") || oper.equals("Add") || oper.equals("addition") || 
    oper.equals("Addition") || oper.equals("+")){...} 

Thay đổi này

if (isOperationAddition(operation)){...} 

Sau đó, bên trong phương pháp đó, không sử dụng làm nguyên liệu Strings chi nhánh vì nếu báo cáo của bạn. Có một biến xác định loại hoạt động của nó và "Giữ những người man rợ (nhầm lẫn/người dùng mơ hồ) ra khỏi con hào". Bạn không nên luôn luôn lặp lại với một danh sách để nhớ những hoạt động chúng ta đang xử lý.

3

Nếu aDD được coi như là đầu vào không hợp lệ, bạn có thể xem xét phương pháp sau đây:

ArrayList<String> possibleInputs = new ArrayList<String>(); 

possibleInputs.add("Add"); 
possibleInputs.add("add"); 
possibleInputs.add("Addition"); 
possibleInputs.add("addition"); 
possibleInputs.add("+"); 

if(possibleInputs.contains(oper)) 
{ 
    // ... 
} 
+0

Không phải là tốt hơn để sử dụng equalsIgnoreCase() sau đó? – TechSpellBound

+1

'possibleInputs. ** Thêm **()' ??? Không có phương thức như vậy trong 'Danh sách'. Gosh, có '2 upvotes' về điều này. –

+1

Bạn có thể sử dụng phương thức 'String # toLowerCase()' để tránh thêm cả '' add "' và '" Add "' vào danh sách của bạn. Bạn có thể giả định rằng 'aDD' không phải là không hợp lệ, vì nó không được liệt kê trong OP. –

4

Ngoài @ câu trả lời Rohit, tôi muốn thêm này.

Trong trường hợp so sánh các chuỗi, nếu oper is null thì có thể ném NullPointerException.Vì vậy, nó luôn luôn tốt hơn để viết

"addition".equalsIgnoreCase(oper) 

thay vì

oper.equalsIgnoreCase("addition") 
0

Bạn có thể lấy đầu vào, và chuyển đổi để chữ thường sau đó so sánh.

str.toLowerCase() 

sau đó vượt qua để if() tuyên bố của bạn

if(str.equals("add") || str.equals("addition") || str.equals("+")) 
Các vấn đề liên quan