Làm thế nào để chuyển đổi đối tượng String thành Boolean Object?


324

Làm thế nào để chuyển đổi Stringđối tượng thành Booleanđối tượng?


2
Giá trị của Chuỗi là gì?
James Goodwin

2
Mong đợi của bạn về cách một chuỗi nên được chuyển đổi thành boolean?
Steve Kuo

1
myvartypeboolean = !! valuetoconvert

Câu trả lời:


516

Hãy thử (tùy thuộc vào loại kết quả bạn muốn):

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

Lợi thế:

  • Boolean: điều này không tạo ra các phiên bản mới của Boolean, vì vậy hiệu suất sẽ tốt hơn (và thu gom rác ít hơn). Nó sử dụng lại hai trường hợp của một trong hai Boolean.TRUEhoặ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.

Các tài liệu chính thức là trong Javadoc .


CẬP NHẬT:

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


1
sẽ không gán Boolean.valueOf cho boolaen2 được tự động mở hộp không? Tôi không thấy sự khác biệt của parseBoolean ở đây.
Alex Feinman

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

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

1
nếu đối tượng String là null thì Boolean.valueOf (String) sẽ trả về false. Nhưng Boolean cũng có thể giữ giá trị null .can bạn cung cấp bất kỳ trợ giúp nào cho việc này.
amit kate

90

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

Ví dụ:

Boolean.valueOf("YES") -> false

Do hành vi đó, tôi khuyên bạn nên thêm một số cơ chế để đảm bảo rằng chuỗi cần được dịch sang Boolean tuân theo một định dạng đã chỉ định.

Ví dụ:

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

9
Đây là ví dụ tốt nhất tôi từng thấy và những gì nên được thực hiện trong loại 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.
Brandon Belvin

2
Không, điều đó không hoàn toàn đúng. đây là cách triển khai cơ bản của parseBoolean static boolean parseBoolean (String s) {return ((s! = null) && s.equalsIgnoreCase ("true")); }
Electricalbah

Heh ... Nếu bạn cần viết mã như vậy, thì bạn không cần gọi Boolean.valueOf. Thay vào đó, bạn có thể cơ cấu lại đơn giản câu lệnh if này để nó sẽ làm những gì bạn muốn ;-)

22
Boolean b = Boolean.valueOf(string);

Giá trị blà true nếu chuỗi không phải là null và bằng true(bỏ qua trường hợp).


17

Bên cạnh câu trả lời xuất sắc của KLE, chúng ta cũng có thể làm cho 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 ... :-))


11
boolean b = string.equalsIgnoreCase("true");

9

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

Điều này sẽ chuyển đổi bất kỳ boolean như chuỗi thành boolean, ví dụ Y, yes, true, N, no, false, v.v.

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


4
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 thành 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

BooleanUtils là gì?
james.garriss

1
org.apache.commons.lang3.BooleanUtils là từ API Apache commons Lang.
Dhana

cộng với những nỗ lực thu thập tất cả các trường hợp sử dụng.
gaurav

1

Đâ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ư chia.


0

Để lấy giá trị boolean của Chuỗi, hãy 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. Thí dụ:

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

5
Bạn đã thử điều này? :) parseBoolean(String s)không ném một ngoại lệ, theo Javadoc.
mừng

0

Tại sao không sử dụng một biểu thức thông thường?

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

0

Chúng tôi đã tạo thư viện Soyuz-to để đơn giản hóa vấn đề này (chuyển đổi X thành Y). Nó chỉ là một bộ câu trả lời SO cho các câu hỏi tương tự. Điều này có thể lạ khi sử dụng thư viện cho một vấn đề đơn giản như vậy, nhưng nó thực sự giúp ích trong rất nhiều trường hợp tương tự.

import io.thedocs.soyuz.to;

Boolean aBoolean = to.Boolean("true");

Vui lòng kiểm tra - nó rất đơn giản và có nhiều tính năng hữu ích khác


-3

Truy cập http://msdn.microsoft.com/en-us/l Library / system.boolean.parse.aspx

Điều này sẽ cho bạn một ý tưởng về những gì để làm.

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

Chi tiết phương pháp

parseBoolean

public static boolean parseBoolean(String s)

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

Thông số:

s - Chuỗi chứa biểu diễn boolean được phân tích cú pháp

Trả về: boolean được biểu thị bằng đố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à một câu hỏi về Java. Ít nhất là nó được gắn thẻ theo cách đó. Câu trả lời này có thể khiến mọi người nhầm lẫn.
paulo.albu Stew

-3

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

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

1
Đây là một đề xuất rất khó khăn khi chuyển đổi Chuỗi thành Boolean và không có ý nghĩa gì.
saw303
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.