ฉันจะตรวจสอบสตริงกับ null ใน java ได้อย่างไร ฉันใช้
stringname.equalsignorecase(null)
แต่มันไม่ทำงาน
ฉันจะตรวจสอบสตริงกับ null ใน java ได้อย่างไร ฉันใช้
stringname.equalsignorecase(null)
แต่มันไม่ทำงาน
คำตอบ:
string == null
เปรียบเทียบว่าวัตถุเป็นโมฆะหรือไม่ string.equals("foo")
เปรียบเทียบค่าภายในของวัตถุนั้น string == "foo"
ไม่ได้ผลเสมอไปเพราะคุณกำลังพยายามดูว่าวัตถุเหมือนกันหรือไม่ไม่ใช่ค่าที่แสดง
คำตอบอีกต่อไป:
หากคุณลองสิ่งนี้จะไม่ได้ผลดังที่คุณพบ:
String foo = null;
if (foo.equals(null)) {
// That fails every time.
}
เหตุผลก็คือ foo เป็นโมฆะจึงไม่รู้ว่า. equals คืออะไร; ไม่มีวัตถุสำหรับ. เท่ากับที่จะเรียกจาก.
สิ่งที่คุณอาจต้องการคือ:
String foo = null;
if (foo == null) {
// That will work.
}
วิธีทั่วไปในการป้องกันตัวเองจากโมฆะเมื่อจัดการกับ Strings คือ:
String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
// Do something here.
}
ด้วยวิธีนี้ถ้า foo เป็นโมฆะมันจะไม่ประเมินครึ่งหลังของเงื่อนไขและทุกอย่างก็ถูกต้อง
วิธีง่ายๆหากคุณใช้ String literal (แทนตัวแปร) คือ:
String foo = null;
...
if ("some String".equals(foo)) {
// Do something here.
}
หากคุณต้องการหลีกเลี่ยงสิ่งนั้น Apache Commons มีคลาส - StringUtils - ที่ให้การดำเนินการกับสตริงที่ปลอดภัย
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
อีกคำตอบคือล้อเล่นและบอกว่าคุณควรทำสิ่งนี้:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
กรุณาอย่าทำอย่างนั้น คุณควรโยนข้อยกเว้นสำหรับข้อผิดพลาดที่พิเศษเท่านั้น หากคุณคาดหวังว่าค่าว่างคุณควรตรวจสอบล่วงหน้าและอย่าปล่อยให้เกิดข้อยกเว้น
ในหัวของฉันมีสองเหตุผลสำหรับเรื่องนี้ ประการแรกข้อยกเว้นช้า การตรวจสอบค่า null นั้นรวดเร็ว แต่เมื่อ JVM แสดงข้อยกเว้นต้องใช้เวลามาก ประการที่สองโค้ดจะอ่านและดูแลรักษาง่ายกว่ามากหากคุณตรวจสอบตัวชี้ค่าว่างล่วงหน้า
s == null
จะไม่ทำงาน?
equals()
ถ้าคุณต้องการที่จะเปรียบเทียบค่า แต่ถ้าคุณต้องการที่จะตรวจสอบว่าตัวแปรคือคุณสามารถใช้null
==
แน่นอนว่าได้ผล คุณพลาดส่วนสำคัญของโค้ด คุณต้องทำดังนี้:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
;)
ใช้ TextUtils Method ถ้าคุณทำงานใน Android
TextUtils.isEmpty (str) : ส่งคืนจริงถ้าสตริงเป็นค่าว่างหรือความยาว 0 พารามิเตอร์: str สตริงที่จะตรวจสอบ Returns: true ถ้า str เป็นค่าว่างหรือความยาวเป็นศูนย์
if(TextUtils.isEmpty(str)) {
// str is null or lenght is 0
}
ด้านล่างนี้คือซอร์สโค้ดของวิธีนี้คุณสามารถใช้ Direclty
/**
* Returns true if the string is null or 0-length.
* @param str the string to be examined
* @return true if str is null or zero length
*/
public static boolean isEmpty(CharSequence str) {
if (str == null || str.length() == 0)
return true;
else
return false;
}
หากเราดูการใช้เมธอด equalsIgnoreCase เราจะพบว่าส่วนนี้:
if (string == null || count != string.count) {
return false;
}
ดังนั้นจึงมักจะกลับถ้าอาร์กิวเมนต์เป็นfalse
null
และเห็นได้ชัดว่านี่เป็นสิ่งที่ถูกต้องเพราะกรณีเดียวที่ควรส่งคืนtrue
คือเมื่อเรียกใช้ equalsIgnoreCase บน a null String
แต่
String nullString = null;
nullString.equalsIgnoreCase(null);
จะส่งผลให้เกิด NullPointerException อย่างแน่นอน
ดังนั้นวิธีการเท่ากับไม่ได้ออกแบบมาเพื่อทดสอบว่าวัตถุเป็นโมฆะเพียงเพราะคุณไม่สามารถเรียกใช้งานnull
ได้
มันดูแปลก ๆ แต่ ...
stringName == null || "".equals(stringName)
ไม่เคยมีปัญหาใด ๆ ในการทำเช่นนี้เลยแถมยังเป็นวิธีตรวจสอบที่ปลอดภัยกว่าในขณะที่หลีกเลี่ยงข้อยกเว้นจุดว่างที่อาจเกิดขึ้น
ฉันไม่แน่ใจว่าเกิดอะไรขึ้นกับคำตอบของ The MYYN
if (yourString != null) {
//do fun stuff with yourString here
}
การตรวจสอบค่าว่างข้างต้นไม่เป็นไร
หากคุณกำลังพยายามตรวจสอบว่าการอ้างอิงสตริงเท่ากันหรือไม่ (โดยไม่สนใจตัวพิมพ์เล็กและใหญ่) กับสตริงอื่นที่คุณรู้ว่าไม่ใช่การอ้างอิงที่เป็นโมฆะให้ทำสิ่งนี้:
String x = "this is not a null reference"
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull) ) {
//do fun stuff
}
หากมีข้อสงสัยว่าคุณมีการอ้างอิงว่างสำหรับทั้งสองสตริงที่คุณกำลังเปรียบเทียบหรือไม่คุณจะต้องตรวจสอบการอ้างอิงที่เป็นโมฆะอย่างน้อยหนึ่งรายการเพื่อหลีกเลี่ยงความเป็นไปได้ของ NullPointerException
หากสตริงของคุณมีค่า "null" คุณสามารถใช้
if(null == stringName){
[code]
}
else
[Error Msg]
นำเข้าในชั้นเรียนของคุณ
import org.apache.commons.lang.StringUtils;
จากนั้นใช้มันทั้งสองจะกลับมาเป็นจริง
System.out.println(StringUtils.isEmpty(""));
System.out.println(StringUtils.isEmpty(null));
คุณสามารถตรวจสอบด้วย String == null
สิ่งนี้ใช้ได้กับฉัน
String foo = null;
if(foo == null){
System.out.println("String is null");
}
แน่นอน user351809 stringname.equalsignorecase(null)
จะโยน NullPointerException
ดูคุณมีวัตถุสตริงstringname
ซึ่งเป็นไปตามเงื่อนไขที่เป็นไปได้ 2 เงื่อนไข: -
stringname
มีบางค่าที่ไม่ใช่ null สตริง (พูดว่า "คอมพิวเตอร์"): "computer".equalsignorecase(null)
false
stringname
มีnull
ความคุ้มค่า: null.equalsignorecase(null)
true
, null
ไม่ได้เป็นวัตถุที่สามารถดำเนินการตามequalsignorecase()
วิธีการดังนั้นคุณจะได้รับข้อยกเว้นเนื่องจากกรณีที่ 2
สิ่งที่ฉันแนะนำให้คุณใช้คือเพียงแค่ใช้stringname == null
วิธีง่ายๆ:
public static boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
หากสิ่งที่value
ส่งคืนเป็นค่าว่างให้ใช้:
if(value.isEmpty());
บางครั้งในการตรวจสอบ null if(value == null)
ใน java มันอาจไม่ให้ true แม้ว่า String จะเป็นโมฆะ
if(value.isEmpty())
NullPointerException
ในกรณีนี้ดีกว่าโดยใช้if(value == null)
ด้วย Java 7 คุณสามารถใช้
if (Objects.equals(foo, null)) {
...
}
ซึ่งจะกลับมาถ้าพารามิเตอร์ทั้งสองtrue
null
ฉันรู้ว่ามีคำตอบนานแล้ว แต่ฉันไม่เห็นโพสต์นี้จึงคิดว่าจะแบ่งปันสิ่งที่ฉันทำ สิ่งนี้ไม่ดีอย่างยิ่งสำหรับความสามารถในการอ่านโค้ด แต่ถ้าคุณต้องทำการตรวจสอบค่าว่างฉันชอบใช้:
String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();
ในตัวอย่างนี้การตัดแต่งเรียกว่าสตริงซึ่งจะส่ง NPE หากสตริงเป็นโมฆะหรือช่องว่าง แต่ในบรรทัดเดียวกันคุณสามารถตรวจสอบค่าว่างหรือว่างเพื่อที่คุณจะได้ไม่ต้องลงท้ายด้วยจำนวนตัน (more ) ยากที่จะจัดรูปแบบหากบล็อก
ถ้าฉันเข้าใจถูกต้องสิ่งนี้ควรทำ:
if(!stringname.isEmpty())
// an if to check if stringname is not null
if(stringname.isEmpty())
// an if to check if stringname is null
ครั้งสุดท้ายที่มีคนถามคำถามโง่ ๆ คำตอบคือ:
someString.equals("null")
"การแก้ไข" นี้เป็นเพียงการซ่อนปัญหาที่ใหญ่กว่าว่าnull
จะเกิดขึ้นได้อย่างไร"null"
ในตอนแรก
มีสองวิธีในการทำ .. Say String == nullหรือstring.equals () ..
public class IfElse {
public int ifElseTesting(String a){
//return null;
return (a== null)? 0: a.length();
}
}
public class ShortCutifElseTesting {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("enter the string please:");
String a=scanner.nextLine();
/*
if (a.equals(null)){
System.out.println("you are not correct");
}
else if(a.equals("bangladesh")){
System.out.println("you are right");
}
else
System.out.println("succesful tested");
*/
IfElse ie=new IfElse();
int result=ie.ifElseTesting(a);
System.out.println(result);
}
}
ตรวจสอบตัวอย่างนี้ .. นี่คืออีกตัวอย่างหนึ่งของเวอร์ชันทางลัดของ If Else ..