Bagaimana cara mengubah objek String ke Objek Boolean?

324

Bagaimana cara mengubah Stringobjek ke Booleanobjek?

Suresh Chaganti
sumber
2
Apa nilai dari String?
James Goodwin
2
Apa harapan Anda tentang bagaimana sebuah string harus dikonversi menjadi boolean?
Steve Kuo
1
myvartypeboolean = !! valuetoconvert

Jawaban:

516

Coba (tergantung pada jenis hasil apa yang Anda inginkan):

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

Keuntungan:

  • Boolean: ini tidak membuat instance baru Boolean, jadi kinerjanya lebih baik (dan lebih sedikit pengumpulan sampah). Ini menggunakan kembali dua contoh dari salah satu Boolean.TRUEatau Boolean.FALSE.
  • boolean: tidak diperlukan instance, Anda menggunakan tipe primitif.

Dokumentasi resmi ada di Javadoc .


DIPERBARUI:

Autoboxing juga dapat digunakan, tetapi memiliki biaya kinerja.
Saya sarankan untuk menggunakannya hanya ketika Anda harus melemparkan diri Anda sendiri, bukan ketika para pemain dihindarkan.

KLE
sumber
1
tidak akan menugaskan Boolean.valueOf ke boolaen2 menjadi auto-unboxed? Saya tidak melihat perbedaannya dengan parseBoolean di sini.
Alex Feinman
9
Masalah terbesar adalah bahwa Boolean tidak akan pengecualian ketika melihat sesuatu yang seharusnya tidak diterima. Ini akan mengembalikan nilai benar untuk apa pun yang dianggapnya "benar" dan akan mengembalikan nilai false untuk yang lainnya . Jika Anda mencoba menerapkan pencocokan string ke nilai boolean yang sesuai, Anda harus menambahkan logika tambahan untuk menangkap kasus ilegal secara manual.
Brandon Belvin
bagaimana jika saya menggunakanboolean boolean2 = Boolean.valueOf("true");
vipin8169
1
jika objek String adalah null maka Boolean.valueOf (String) akan mengembalikan false. Tapi Boolean dapat menyimpan nilai null juga. Dapatkah Anda memberikan bantuan untuk hal ini.
amit kate
90

Anda harus berhati-hati saat menggunakan Boolean.valueOf (string) atau Boolean.parseBoolean (string) . Alasan untuk ini adalah bahwa metode akan selalu mengembalikan false jika String tidak sama dengan "true" (case diabaikan).

Sebagai contoh:

Boolean.valueOf("YES") -> false

Karena perilaku itu, saya akan merekomendasikan untuk menambahkan beberapa mekanisme untuk memastikan bahwa string yang harus diterjemahkan ke Boolean mengikuti format yang ditentukan.

Misalnya:

if (string.equalsIgnoreCase("true") || string.equalsIgnoreCase("false")) {
    Boolean.valueOf(string)
    // do something   
} else {
    // throw some exception
}
zlajo
sumber
9
Ini adalah contoh terbaik yang pernah saya lihat dan apa yang seharusnya diimplementasikan dalam tipe Boolean untuk memulai. Melempar pengecualian untuk nilai Boolean yang tidak valid penting untuk banyak aplikasi.
Brandon Belvin
2
Tidak, itu tidak sepenuhnya benar. di sini adalah implementasi yang mendasari parseBoolean public static boolean parseBoolean (String s) {return ((s! = null) && s.equalsIgnoreCase ("true")); }
electricalbah
Heh ... Jika Anda perlu menulis kode seperti itu, maka Anda tidak perlu menelepon Boolean.valueOf. Alih-alih, Anda dapat merestrukturisasi pernyataan if ini sehingga ia akan melakukan apa yang Anda inginkan ;-)
22
Boolean b = Boolean.valueOf(string);

Nilai btrue jika string bukan nol dan sama dengan true(mengabaikan kasus).

CJS
sumber
17

Selain jawaban yang sangat baik dari KLE, kami juga dapat membuat sesuatu yang lebih fleksibel:

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");

(terinspirasi oleh jawaban zlajo ... :-))

PhiLho
sumber
11
boolean b = string.equalsIgnoreCase("true");
Zed
sumber
9

Nah, seperti sekarang pada Januari, 2018, cara terbaik untuk ini adalah dengan menggunakan apache BooleanUtils.toBoolean .

Ini akan mengonversi string boolean seperti apa pun menjadi boolean, misalnya Y, ya, benar, N, tidak, salah, dll.

Sangat berguna!

david30xie
sumber
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.");
    }

Cara saya untuk mengubah string menjadi boolean.

AechoLiu
sumber
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));
}

Hasil:

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
Dhana
sumber
Apa itu BooleanUtils?
james.garriss
1
org.apache.commons.lang3.BooleanUtils dari Apache commons Lang API.
Dhana
plus untuk upaya mengumpulkan semua kasus penggunaan.
gaurav
1

Beginilah cara saya melakukannya:

"1##true".contains( string )

Untuk kasus saya kebanyakan 1 atau benar. Saya menggunakan hash sebagai pembagi.

Tomislav Boras
sumber
0

Untuk mendapatkan nilai boolean dari sebuah String, coba ini:

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.
    }
}

Jika ada kesalahan, itu akan mengembalikan nol. Contoh:

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

sumber
5
Sudahkah Anda mencoba ini? :) parseBoolean(String s)tidak melempar pengecualian, menurut Javadoc.
buka
0

Mengapa tidak menggunakan ekspresi reguler?

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

Kami membuat pustaka soyuz-to untuk menyederhanakan masalah ini (konversi X ke Y). Itu hanya seperangkat jawaban SO untuk pertanyaan serupa. Ini mungkin aneh menggunakan perpustakaan untuk masalah yang begitu sederhana, tetapi sangat membantu dalam banyak kasus serupa.

import io.thedocs.soyuz.to;

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

Silakan periksa - sangat sederhana dan memiliki banyak fitur berguna lainnya

fedor.belov
sumber
-3

Mengunjungi http://msdn.microsoft.com/en-us/library/system.boolean.parse.aspx

Ini akan memberi Anda gambaran tentang apa yang harus dilakukan.

Ini yang saya dapatkan dari dokumentasi Java :

Detail Metode

parseBoolean

public static boolean parseBoolean(String s)

Mengurai argumen string sebagai boolean. Boolean yang dikembalikan mewakili nilai true jika argumen string tidak nulldan sama, mengabaikan case, ke string " true".

Parameter:

s - String yang berisi representasi boolean untuk diuraikan

Pengembalian: boolean diwakili oleh argumen string

Sejak: 1.5

Vesco Pro
sumber
1
Meskipun teks pertanyaannya tidak eksplisit, ini adalah pertanyaan tentang Java. Setidaknya itu ditandai seperti itu. Jawaban ini dapat membingungkan orang.
paulo.albuquerque
-3

Anda dapat langsung menetapkan nilai boolean yang setara dengan string apa pun oleh kelas Sistem dan mengaksesnya di mana saja ..

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
Prateek Singh
sumber
1
Ini adalah proposal yang sangat rumit untuk mengubah sebuah String menjadi Boolean dan tidak masuk akal.
saw303