StringUtils.isBlank () vs String.isEmpty ()


215

ฉันพบรหัสบางส่วนที่มีต่อไปนี้:

String foo = getvalue("foo");
if (StringUtils.isBlank(foo))
    doStuff();
else
    doOtherStuff();

สิ่งนี้ดูเหมือนจะทำงานได้เทียบเท่ากับสิ่งต่อไปนี้:

String foo = getvalue("foo");
if (foo.isEmpty())
    doStuff();
else
    doOtherStuff();

ความแตกต่างระหว่างสอง ( org.apache.commons.lang3.StringUtils.isBlankและjava.lang.String.isEmpty) คืออะไร?


7
อาจเป็นสิ่งที่ควรพูดถึงนอกจากนี้ยังมีสิ่งหนึ่งStringUtils.isEmpty(foo)ที่ช่วยให้คุณหลีกเลี่ยงพอยน์เตอร์พอยน์เตอร์ได้เช่นisBlankกัน แต่ไม่ได้ตรวจสอบอักขระช่องว่าง
Xavi

คำตอบ:


380

StringUtils.isBlank()ตรวจสอบว่าอักขระแต่ละตัวของสตริงเป็นอักขระช่องว่าง (หรือว่าสตริงนั้นว่างเปล่าหรือเป็นโมฆะ) สิ่งนี้ต่างจากการตรวจสอบว่าสตริงว่างเปล่าหรือไม่

จากเอกสารที่เชื่อมโยง:

ตรวจสอบว่าสตริงเป็นช่องว่างว่างเปล่า ("") หรือ null

 StringUtils.isBlank(null)      = true
 StringUtils.isBlank("")        = true  
 StringUtils.isBlank(" ")       = true  
 StringUtils.isBlank("bob")     = false  
 StringUtils.isBlank("  bob  ") = false

สำหรับการเปรียบเทียบStringUtils.isEmpty :

 StringUtils.isEmpty(null)      = true
 StringUtils.isEmpty("")        = true  
 StringUtils.isEmpty(" ")       = false  
 StringUtils.isEmpty("bob")     = false  
 StringUtils.isEmpty("  bob  ") = false

คำเตือน: ในjava.lang.String .isBlank () และjava.lang.String .isEmpty () ทำงานเดียวกันยกเว้นพวกเขาไม่ได้กลับมาสำหรับtruenull

java.lang.String.isBlank()

java.lang.String.isEmpty()


135

คำตอบที่ยอมรับจาก @arshajii นั้นถูกต้องทั้งหมด อย่างไรก็ตามมีความชัดเจนมากขึ้นโดยพูดด้านล่าง

StringUtils.isBlank ()

 StringUtils.isBlank(null)      = true
 StringUtils.isBlank("")        = true  
 StringUtils.isBlank(" ")       = true  
 StringUtils.isBlank("bob")     = false  
 StringUtils.isBlank("  bob  ") = false

StringUtils.isEmpty

 StringUtils.isEmpty(null)      = true
 StringUtils.isEmpty("")        = true  
 StringUtils.isEmpty(" ")       = false  
 StringUtils.isEmpty("bob")     = false  
 StringUtils.isEmpty("  bob  ") = false

39

StringUtils isEmpty = String isEmpty checks + ตรวจสอบหาค่าว่าง

StringUtils isBlank = StringUtils isEmptyตรวจสอบ + ตรวจสอบว่าข้อความมีอักขระช่องว่างเท่านั้น

ลิงค์ที่มีประโยชน์สำหรับการตรวจสอบเพิ่มเติม:


14

StringUtils.isBlank() จะตรวจสอบหาโมฆะในขณะนี้:

String foo = getvalue("foo");
if (foo.isEmpty())

จะโยนNullPointerExceptionถ้าfooเป็นโมฆะ


4
มีความแตกต่างที่ใหญ่กว่านั้นคือ; เห็นคำตอบของฉัน
arshajii

3
สิ่งนี้ไม่ถูกต้อง String.isEmpty () จะคืนค่าจริงหากเป็นโมฆะ อย่างน้อยถ้าคุณกำลังพูดถึงรุ่น apache.commons.lang ฉันไม่แน่ใจเกี่ยวกับเวอร์ชั่นสปริง
ryoung

1
ความหมายของความคิดเห็นของฉันถูกแก้ไขไปแล้ว (เพื่อความเป็นธรรมมันอาจจะชัดเจนมากขึ้นจากการได้รับไป); ฉันไม่ได้เปรียบเทียบ StringUtils.isBlank () เพื่อ StringUtils.isEmpty () - ค่อนข้าง StringUtils.isBlank () เพื่อ OP ของ value.isEmpty ()
ฉัตร

1
คำตอบของ chut นั้นถูกต้อง หาก java String foo เป็นโมฆะดังนั้น foo.isEmpty () จะพ่น NullPointerException apache StringUtils.isBlank (foo) ส่งคืนค่าจริงแม้ว่า foo จะเป็นค่าว่าง
user2590805

6

StringUtils.isBlankผลตอบแทนtrueสำหรับช่องว่างเพียง:

isBlank (สตริง STR)

ตรวจสอบว่าสตริงเป็นช่องว่างว่างเปล่า ("") หรือ null


5

StringUtils.isBlank(foo)จะทำการตรวจสอบ null สำหรับคุณ หากคุณดำเนินการfoo.isEmpty()และfooเป็นโมฆะคุณจะเพิ่ม NullPointerException


มีความแตกต่างที่ใหญ่กว่านั้นคือ; เห็นคำตอบของฉัน
arshajii

2

StringUtils.isBlank () ผลตอบแทนจริงสำหรับช่องว่าง (เพียงแค่ช่องว่าง) และ null สตริงเช่นกัน จริงๆแล้วมันจะตัดแต่งลำดับ Char และทำการตรวจสอบ

StringUtils.isEmpty () ผลตอบแทนจริงเมื่อไม่มีความผิดปกติในพารามิเตอร์ String หรือเมื่อพารามิเตอร์ String เป็นโมฆะ ความแตกต่างคือ isEmpty () จะคืนค่า false ถ้าพารามิเตอร์ String มีเพียงช่องว่าง มันถือว่า whitespaces เป็นสถานะของการไม่ว่างเปล่า


2

ข้อแตกต่างระหว่าง isBlank () และ isEmpty () คือ:

StringUtils.isBlank(" ")       = true //compared string value has space and considered as blank

StringUtils.isEmpty(" ")       = false //compared string value has space and not considered as empty

1
public static boolean isEmpty(String ptext) {
 return ptext == null || ptext.trim().length() == 0;
}

public static boolean isBlank(String ptext) {
 return ptext == null || ptext.trim().length() == 0;
}

ทั้งสองมีรหัสเดียวกันว่า isBlank จะจัดการกับช่องว่างสีขาวได้อย่างไรคุณอาจหมายถึง isBlankString ซึ่งมีรหัสสำหรับจัดการช่องว่าง

public static boolean isBlankString( String pString ) {
 int strLength;
 if( pString == null || (strLength = pString.length()) == 0)
 return true;
 for(int i=0; i < strLength; i++)
 if(!Character.isWhitespace(pString.charAt(i)))
 return false;
 return false;
}

1

แทนที่จะใช้ lib บุคคลที่สามให้ใช้ Java 11 isBlank ()

    String str1 = "";
    String str2 = "   ";
    Character ch = '\u0020';
    String str3 =ch+" "+ch;

    System.out.println(str1.isEmpty()); //true
    System.out.println(str2.isEmpty()); //false
    System.out.println(str3.isEmpty()); //false            

    System.out.println(str1.isBlank()); //true
    System.out.println(str2.isBlank()); //true
    System.out.println(str3.isBlank()); //true

-2

ฉันตอบคำถามนี้เพราะมันเป็นผลอันดับต้น ๆ ใน Google สำหรับ "String isBlank () Method"

หากคุณกำลังใช้ Java 11 หรือสูงกว่าคุณสามารถใช้คลาส String ISBLANK ()วิธีการ วิธีนี้ทำในสิ่งเดียวกันกับ Apache Commons StringUtils class

ผมได้เขียนโพสต์เล็ก ๆ บนตัวอย่างวิธีการนี้อ่านได้ที่นี่

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