วิธีการแปลง String วัตถุเป็นวัตถุบูลีน?


324

วิธีการแปลงStringวัตถุเป็นBooleanวัตถุ?


2
ค่าของสตริงคืออะไร?
James Goodwin

2
คุณคาดหวังว่าจะแปลงสตริงเป็นบูลีนอย่างไร
Steve Kuo

1
myvartypeboolean = !! valuetoconvert

คำตอบ:


516

ลอง (ขึ้นอยู่กับประเภทผลลัพธ์ที่คุณต้องการ):

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

ความได้เปรียบ:

  • บูลีน: สิ่งนี้จะไม่สร้างอินสแตนซ์ใหม่ของบูลีนดังนั้นประสิทธิภาพจึงดีกว่า (และเก็บขยะน้อยลง) มัน reuses ทั้งสองกรณีของการอย่างใดอย่างหนึ่งหรือBoolean.TRUEBoolean.FALSE
  • บูลีน: ไม่ต้องการอินสแตนซ์คุณใช้ชนิดดั้งเดิม

เอกสารอย่างเป็นทางการอยู่ในJavadoc


UPDATED:

สามารถใช้ Autoboxing ได้ แต่จะมีค่าใช้จ่ายด้านประสิทธิภาพ
ฉันแนะนำให้ใช้เฉพาะเมื่อคุณจะต้องร่ายเองเท่านั้นไม่ใช่เมื่อนักแสดงสามารถหลีกเลี่ยงได้


1
จะไม่กำหนด Boolean.valueOf ให้กับ boolaen2 โดยอัตโนมัติหรือไม่ ฉันไม่เห็นความแตกต่างในการแยกวิเคราะห์บูลีนที่นี่
Alex Feinman

9
ปัญหาที่ใหญ่ที่สุดคือบูลีนจะไม่ยกเว้นเมื่อเห็นสิ่งที่ไม่ควรยอมรับ มันจะกลับมาจริงสำหรับอะไรที่มันเห็นว่าเป็น "ความจริง" และจะกลับเท็จสำหรับทุกสิ่งทุกอย่าง หากคุณกำลังพยายามบังคับใช้การจับคู่สตริงกับค่าบูลีนที่เหมาะสมคุณจะต้องเพิ่มตรรกะเพิ่มเติมเพื่อตรวจจับกรณีที่ผิดกฎหมายด้วยตนเอง
แบรนดอน Belvin

เกิดอะไรขึ้นถ้าฉันใช้boolean boolean2 = Boolean.valueOf("true");
vipin8169

1
ถ้า String วัตถุเป็นโมฆะแล้ว Boolean.valueOf (String) จะคืนค่าเท็จ แต่ Boolean สามารถเก็บค่า Null ไว้ได้คุณสามารถให้ความช่วยเหลือใด ๆ
amit kate

90

คุณจะต้องระวังเมื่อใช้Boolean.valueOf (สตริง)หรือBoolean.parseBoolean (สตริง) เหตุผลนี้คือวิธีการที่มักจะกลับเท็จถ้าสตริงไม่เท่ากับ "จริง" (กรณีที่จะถูกละเว้น)

ตัวอย่างเช่น:

Boolean.valueOf("YES") -> false

เนื่องจากพฤติกรรมดังกล่าวฉันขอแนะนำให้เพิ่มกลไกบางอย่างเพื่อให้แน่ใจว่าสตริงที่ควรแปลเป็นบูลีนเป็นไปตามรูปแบบที่ระบุ

ตัวอย่างเช่น

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

9
นี่คือตัวอย่างที่ดีที่สุดที่ฉันเคยเห็นและสิ่งที่ควรนำมาใช้ในประเภทบูลีนเพื่อเริ่มต้น การโยนข้อยกเว้นสำหรับค่าบูลีนที่ไม่ถูกต้องเป็นสิ่งสำคัญสำหรับหลาย ๆ แอปพลิเคชัน
แบรนดอน Belvin

2
ไม่ว่าไม่จริงทั้งหมด นี่คือการใช้งานพื้นฐานของ parseBoolean public static boolean parseBoolean (String s) {return ((s! = null) && s.equalsIgnoreCase ("true")); }
electricbah

เฮ้ ... ถ้าคุณจำเป็นต้องเขียนรหัสนั้นคุณไม่จำเป็นต้องโทรหา Boolean.valueOf แต่คุณสามารถปรับโครงสร้างนี้ถ้าคำสั่งมันจะทำสิ่งที่คุณต้องการ ;-)

22
Boolean b = Boolean.valueOf(string);

ค่าของbเป็นจริงถ้าสตริงไม่เป็นโมฆะและเท่ากับtrue(ไม่สนใจขนาดตัวพิมพ์)


17

นอกเหนือจากคำตอบที่ยอดเยี่ยมของ KLE แล้วเรายังสามารถทำให้บางอย่างมีความยืดหยุ่นมากขึ้น:

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

(แรงบันดาลใจจากคำตอบของ zlajo ... :-))



9

ดีที่ตอนนี้อยู่ใน ม.ค. 2018 วิธีที่ดีที่สุดคือการใช้ของ BooleanUtils.toBooleanApache

สิ่งนี้จะแปลงบูลีนใด ๆ เช่นสตริงเป็นบูลีนเช่น Y, ใช่, จริง, N, no, false ฯลฯ

มีประโยชน์จริงๆ!


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

วิธีแปลงสตริงเป็นบูลีน


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

ผลลัพธ์:

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 คืออะไร
james.garriss

1
org.apache.commons.lang3.BooleanUtils มาจาก Apache Commons Lang API
Dhana

บวกกับความพยายามรวบรวมทุกกรณีการใช้งาน
gaurav

1

นี่คือวิธีที่ฉันทำ:

"1##true".contains( string )

สำหรับกรณีของฉันส่วนใหญ่เป็น 1 หรือจริง ฉันใช้แฮชเป็นตัวแบ่ง


0

ในการรับค่าบูลีนของสตริงลองทำดังนี้:

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

หากมีข้อผิดพลาดมันจะกลับเป็นโมฆะ ตัวอย่าง:

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

5
คุณเคยลองสิ่งนี้หรือไม่? :) parseBoolean(String s)ไม่ส่งข้อยกเว้นตาม Javadoc
แร็ป

0

ทำไมไม่ใช้การแสดงออกปกติ?

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

0

เราสร้างไลบรารี่ Soyuz-toเพื่อทำให้ปัญหานี้ง่ายขึ้น (แปลง X เป็น Y) มันเป็นชุดของคำตอบ SO สำหรับคำถามที่คล้ายกัน อาจเป็นเรื่องแปลกที่จะใช้ห้องสมุดสำหรับปัญหาง่ายๆ แต่จริงๆแล้วมันช่วยได้ในหลายกรณีที่คล้ายกัน

import io.thedocs.soyuz.to;

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

โปรดตรวจสอบ - ง่ายมากและมีคุณสมบัติที่มีประโยชน์อื่น ๆ อีกมากมาย


-3

เยี่ยมชมhttp://msdn.microsoft.com/en-us/library/system.boolean.parse.aspx

สิ่งนี้จะทำให้คุณมีความคิดว่าจะทำอย่างไร

นี่คือสิ่งที่ฉันได้รับจากเอกสาร Java :

รายละเอียดวิธีการ

parseBoolean

public static boolean parseBoolean(String s)

แยกวิเคราะห์อาร์กิวเมนต์สตริงเป็นบูลีน บูลีนที่ส่งคืนแสดงถึงค่าจริงถ้าอาร์กิวเมนต์สตริงไม่nullและเท่ากับ, ไม่สนใจขนาดตัวพิมพ์, กับสตริง " true"

พารามิเตอร์:

s - สตริงที่มีการแทนค่าบูลีนที่จะแยกวิเคราะห์

คืนค่า:บูลีนที่แสดงโดยอาร์กิวเมนต์สตริง

ตั้งแต่: 1.5


1
แม้ว่าข้อความของคำถามจะไม่ชัดเจน แต่เป็นคำถามเกี่ยวกับ Java อย่างน้อยก็ติดแท็กด้วยวิธีนี้ คำตอบนี้อาจทำให้ผู้คนสับสน
paulo.albuquerque

-3

คุณสามารถตั้งค่าบูลีนที่เทียบเท่าโดยตรงกับสตริงใด ๆ โดยคลาสระบบและเข้าถึงได้ทุกที่ ..

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
นี่เป็นข้อเสนอที่แฮ็กมากในการแปลงสตริงให้เป็นบูลีนและไม่สมเหตุสมผล
saw303
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.