2009-10-08 64 views

Trả lời

416

Try (tùy thuộc vào loại kết quả mà bạn muốn):

Boolean boolean1 = Boolean.valueOf("true"); 
boolean boolean2 = Boolean.parseBoolean("true"); 

Ưu điểm:

  • Boolean: điều này không tạo ra các trường hợp mới của Boolean, vì vậy hiệu suất tốt hơn (và ít garbage- bộ sưu tập). Nó reuses hai trường hợp của Boolean.TRUE hoặc Boolean.FALSE.
  • boolean: không cần phiên bản nào, bạn sử dụng kiểu nguyên thủy.

Tài liệu chính thức nằm trong số Javadoc.


CẬP NHẬT:

autoboxing cũng có thể được sử dụng, nhưng nó có một chi phí hiệu quả.
Tôi đề nghị sử dụng nó chỉ khi bạn sẽ phải tự đúc, chứ không phải khi diễn viên có thể tránh được.

+0

sẽ không gán Boolean.valueOf cho boolaen2 được tự động bỏ hộp không? Tôi không thấy sự khác biệt với parseBoolean ở đây. –

+6

Vấn đề lớn nhất là Boolean sẽ không ngoại lệ khi nó nhìn thấy một cái gì đó nó không nên chấp nhận. Nó sẽ trả về true cho bất cứ thứ gì mà nó thấy là "true" và sẽ trả về false cho * mọi thứ khác *. Nếu bạn đang cố gắng thực thi khớp một chuỗi với giá trị boolean thích hợp, bạn sẽ phải thêm logic bổ sung để bắt các trường hợp bất hợp pháp theo cách thủ công. –

+0

nếu tôi sử dụng 'boolean boolean2 = Boolean.valueOf (" true ");' – vipin8169

18
Boolean b = Boolean.valueOf(string); 

Giá trị của b là true nếu chuỗi không phải là một giá trị và bằng true (bỏ qua trường hợp).

77

Bạn phải cẩn thận khi sử dụng Boolean.valueOf (string) hoặc Boolean.parseBoolean (string). Lý do cho điều này là các phương thức sẽ luôn trả về false nếu String không bằng "true" (trường hợp bị bỏ qua).

Ví dụ:

Boolean.valueOf("YES") -> false 

Bởi vì hành vi mà tôi muốn giới thiệu thêm một số cơ chế để đảm bảo rằng các chuỗi cần được dịch sang một Boolean sau một định dạng cụ thể.

Ví dụ:

if (string.equalsIgnoreCase("true") || string.equalsIgnoreCase("false")) { 
    Boolean.valueOf(string) 
    // do something 
} else { 
    // throw some exception 
} 
+7

Đây là ví dụ tốt nhất mà tôi đã nhìn thấy và những gì cần phải được thực hiện trong kiểu Boolean để bắt đầu. Việc ném một ngoại lệ cho giá trị Boolean không hợp lệ là rất quan trọng đối với nhiều ứng dụng. –

+1

Không có điều đó không hoàn toàn đúng. ở đây là việc thực hiện cơ bản của parseBoolean public static boolean parseBoolean (String s) { return ((s! = Null) && s.equalsIgnoreCase ("true")); } – electricalbah

18

Bên cạnh câu trả lời tuyệt vời của KLE, chúng tôi cũng có thể làm một cái gì đó linh hoạt hơn:

boolean b = string.equalsIgnoreCase("true") || string.equalsIgnoreCase("t") || 
     string.equalsIgnoreCase("yes") || string.equalsIgnoreCase("y") || 
     string.equalsIgnoreCase("sure") || string.equalsIgnoreCase("aye") || 
     string.equalsIgnoreCase("oui") || string.equalsIgnoreCase("vrai"); 

(lấy cảm hứng từ câu trả lời của zlajo ... :-))

10
boolean b = string.equalsIgnoreCase("true"); 
-3

Ghé thăm http://msdn.microsoft.com/en-us/library/system.boolean.parse.aspx

Điều này sẽ cung cấp cho bạn một ý tưởng về những việc cần làm.

Đây là những gì tôi nhận được từ các Java documentation:

Phương pháp chi tiết

parseBoolean

public static boolean parseBoolean(String s)

phân tích các tham số chuỗi như một boolean. Boolean trả về đại diện cho giá trị true nếu đối số chuỗi không phải là null và bằng nhau, bỏ qua trường hợp, với chuỗi "true".

Tham số:

s - String chứa các đại diện boolean để được phân tích

Returns: boolean đại diện bởi các đối số chuỗi

Từ: 1,5

+1

Mặc dù văn bản của câu hỏi không rõ ràng, đây là câu hỏi về Java. Ít nhất nó được gắn thẻ theo cách đó. Câu trả lời này có thể gây nhầm lẫn cho mọi người. –

0

Đây là cách tôi đã làm nó:

"1##true".contains(string)

Đối với trường hợp của tôi chủ yếu là 1 hoặc đúng. Tôi sử dụng băm như bộ chia.

-2

bạn có thể trực tiếp đặt giá trị boolean tương đương với bất kỳ chuỗi bởi hệ thống lớp và truy cập nó bất cứ nơi nào ..

System.setProperty("n","false"); 
System.setProperty("y","true"); 

System.setProperty("yes","true");  
System.setProperty("no","false"); 

System.out.println(Boolean.getBoolean("n")); //false 
System.out.println(Boolean.getBoolean("y")); //true 
System.out.println(Boolean.getBoolean("no")); //false 
System.out.println(Boolean.getBoolean("yes")); //true 
2

Để có được giá trị boolean của một String, thử điều này:

public boolean toBoolean(String s) { 
    try { 
     return Boolean.parseBoolean(s); // Successfully converted String to boolean 
    } catch(Exception e) { 
     return null; // There was some error, so return null. 
    } 
} 

Nếu có lỗi, nó sẽ trả về null. Ví dụ:

toBoolean("true"); // Returns true 
toBoolean("tr.u;e"); // Returns null 
+4

Bạn đã thử cái này chưa? :) 'parseBoolean (String s)' không ném một ngoại lệ, theo Javadoc. – rapt

3
public static boolean stringToBool(String s) { 
     s = s.toLowerCase(); 
     Set<String> trueSet = new HashSet<String>(Arrays.asList("1", "true", "yes")); 
     Set<String> falseSet = new HashSet<String>(Arrays.asList("0", "false", "no")); 

     if (trueSet.contains(s)) 
      return true; 
     if (falseSet.contains(s)) 
      return false; 

     throw new IllegalArgumentException(s + " is not a boolean."); 
    } 

cách của tôi để chuyển đổi chuỗi để boolean.

3
String[] values= new String[]{"y","Y","n","N","Yes","YES","yes","no","No","NO","true","false","True","False","TRUE","FALSE",null}; 
for(String booleanStr : values){ 
    System.out.println("Str ="+ booleanStr +": boolean =" +BooleanUtils.toBoolean(booleanStr)); 
} 

Kết quả:

Str =N: boolean =false 
Str =Yes: boolean =true 
Str =YES: boolean =true 
Str =yes: boolean =true 
Str =no: boolean =false 
Str =No: boolean =false 
Str =NO: boolean =false 
Str =true: boolean =true 
Str =false: boolean =false 
Str =True: boolean =true 
Str =False: boolean =false 
Str =TRUE: boolean =true 
Str =FALSE: boolean =false 
Str =null: boolean =false 
+0

BooleanUtils là gì? –

+0

org.apache.commons.lang3.BooleanUtils là từ API của Apache commons Lang. – Dhana

0

Tại sao không sử dụng một biểu thức chính quy?

public static boolean toBoolean(String target) 
{ 
    if(target == null) return false; 
    return target.matches("(?i:^(1|true|yes|oui|vrai|y)$)"); 
} 
0

Vâng, như bây giờ trong tháng 1 năm 2018, cách tốt nhất cho việc này là sử dụng apache's BooleanUtils.toBoolean.

Điều này sẽ chuyển đổi bất kỳ chuỗi như boolean thành boolean, ví dụ: Y, vâng, đúng, N, không, sai, v.v.

Thực sự tiện dụng!

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