Làm cách nào để kiểm tra một chuỗi so với null trong java? tôi đang dùng
stringname.equalsignorecase(null)
nhưng nó không hoạt động.
Làm cách nào để kiểm tra một chuỗi so với null trong java? tôi đang dùng
stringname.equalsignorecase(null)
nhưng nó không hoạt động.
Câu trả lời:
string == null
so sánh nếu đối tượng là null. string.equals("foo")
so sánh giá trị bên trong của đối tượng đó. string == "foo"
không phải lúc nào cũng hoạt động, bởi vì bạn đang cố gắng xem các đối tượng có giống nhau không, không phải giá trị mà chúng đại diện.
Câu trả lời dài hơn:
Nếu bạn thử điều này, nó sẽ không hoạt động, như bạn đã tìm thấy:
String foo = null;
if (foo.equals(null)) {
// That fails every time.
}
Lý do là foo là null nên nó không biết .equals là gì; không có đối tượng nào ở đó cho .equals được gọi từ.
Những gì bạn có thể muốn là:
String foo = null;
if (foo == null) {
// That will work.
}
Cách điển hình để bảo vệ bạn khỏi null khi xử lý các Chuỗi là:
String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
// Do something here.
}
Bằng cách đó, nếu foo là null, nó không đánh giá nửa sau của điều kiện và mọi thứ đều ổn.
Cách dễ dàng, nếu bạn đang sử dụng chuỗi ký tự (thay vì một biến), là:
String foo = null;
...
if ("some String".equals(foo)) {
// Do something here.
}
Nếu bạn muốn giải quyết vấn đề đó, Apache Commons có một lớp - StringUtils - cung cấp các hoạt động Chuỗi không an toàn.
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
Một phản hồi khác là đùa cợt và nói rằng bạn nên làm điều này:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
Xin đừng làm vậy. Bạn chỉ nên ném các ngoại lệ cho các lỗi đặc biệt; nếu bạn đang mong đợi một null, bạn nên kiểm tra nó trước thời hạn và không để nó ném ra ngoại lệ.
Trong đầu tôi, có hai lý do cho việc này. Đầu tiên, các ngoại lệ chậm; kiểm tra so với null rất nhanh, nhưng khi JVM ném một ngoại lệ, nó mất rất nhiều thời gian. Thứ hai, mã dễ đọc và dễ bảo trì hơn nhiều nếu bạn chỉ kiểm tra con trỏ null trước thời hạn.
s == null
sẽ không hoạt động?
equals()
nếu bạn muốn so sánh các giá trị . Nhưng nếu bạn muốn kiểm tra xem một biến có null
, bạn sử dụng ==
.
Chắc chắn nó hoạt động. Bạn đang bỏ lỡ một phần quan trọng của mã. Bạn chỉ cần làm như sau:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
;)
Sử dụng Phương pháp TextUtils nếu bạn đang làm việc trong Android.
TextUtils.isEmpty (str) : Trả về true nếu chuỗi là null hoặc 0-length. Tham số: str chuỗi được kiểm tra Trả về: true nếu str có độ dài rỗng hoặc bằng 0
if(TextUtils.isEmpty(str)) {
// str is null or lenght is 0
}
Dưới đây là mã nguồn của phương pháp này, bạn có thể sử dụng trực tiếp.
/**
* 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;
}
Nếu chúng ta xem xét việc triển khai phương thức equalsIgnoreCase, chúng ta thấy phần này:
if (string == null || count != string.count) {
return false;
}
Vì vậy, nó sẽ luôn trả về false
nếu đối số là null
. Và điều này rõ ràng là đúng, bởi vì trường hợp duy nhất mà nó sẽ trả về true
là khi equalsIgnoreCase được gọi trên một null String
, nhưng
String nullString = null;
nullString.equalsIgnoreCase(null);
chắc chắn sẽ dẫn đến một NullPointerException.
Vì vậy, các phương thức bằng không được thiết kế để kiểm tra xem một đối tượng có rỗng hay không, chỉ vì bạn không thể gọi chúng trên đó null
.
Điều này trông hơi lạ, nhưng ...
stringName == null || "".equals(stringName)
Không bao giờ có bất kỳ sự cố nào khi thực hiện theo cách này, cộng với đó là một cách an toàn hơn để kiểm tra trong khi tránh các ngoại lệ điểm rỗng tiềm ẩn.
Tôi không chắc câu trả lời của The MYYN đã sai ở điểm nào.
if (yourString != null) {
//do fun stuff with yourString here
}
Kiểm tra null ở trên là khá ổn.
Nếu bạn đang cố gắng kiểm tra xem một tham chiếu Chuỗi có bằng (bỏ qua chữ hoa chữ thường) với một chuỗi khác mà bạn biết không phải là tham chiếu rỗng hay không, thì hãy làm như sau:
String x = "this is not a null reference"
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull) ) {
//do fun stuff
}
Nếu có bất kỳ nghi ngờ nào về việc bạn có tham chiếu null cho cả hai Chuỗi mà bạn đang so sánh hay không, bạn sẽ cần kiểm tra tham chiếu null trên ít nhất một trong số chúng để tránh khả năng xảy ra NullPointerException.
Nếu chuỗi của bạn có giá trị "null" thì bạn có thể sử dụng
if(null == stringName){
[code]
}
else
[Error Msg]
nhập nó trong lớp của bạn
import org.apache.commons.lang.StringUtils;
sau đó sử dụng nó, cả hai đều sẽ trả về true
System.out.println(StringUtils.isEmpty(""));
System.out.println(StringUtils.isEmpty(null));
Bạn có thể kiểm tra bằng String == null
Điều này phù hợp với tôi
String foo = null;
if(foo == null){
System.out.println("String is null");
}
Tất nhiên user351809, stringname.equalsignorecase(null)
sẽ ném NullPointerException.
Hãy xem, bạn có một đối tượng chuỗi stringname
tuân theo 2 điều kiện có thể có: -
stringname
có một số giá trị chuỗi không rỗng (giả sử "máy tính"): "computer".equalsignorecase(null)
false
.stringname
có null
giá trị: null.equalsignorecase(null)
true
, null
không phải là một đối tượng có thể thực thi equalsignorecase()
phương thức.Do đó, bạn có được ngoại lệ do trường hợp 2.
Điều tôi đề nghị bạn chỉ cần sử dụngstringname == null
Phương pháp đơn giản:
public static boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
Nếu kết quả value
trả về là null, hãy sử dụng:
if(value.isEmpty());
Đôi khi để kiểm tra null, if(value == null)
trong java, nó có thể không cho true ngay cả khi Chuỗi là null.
if(value.isEmpty())
mang lại NullPointerException
. Trong trường hợp này thì tốt hơn nên sử dụngif(value == null)
Với Java 7, bạn có thể sử dụng
if (Objects.equals(foo, null)) {
...
}
sẽ trả về true
nếu cả hai tham số null
.
Tôi nhận ra điều này đã được trả lời từ lâu, nhưng tôi chưa thấy bài đăng này được đăng, vì vậy tôi nghĩ tôi sẽ chia sẻ những gì tôi làm. Điều này không đặc biệt tốt cho khả năng đọc mã, nhưng nếu bạn phải thực hiện một loạt các kiểm tra rỗng, tôi muốn sử dụng:
String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();
Trong ví dụ này, trim được gọi trên chuỗi, sẽ ném ra một NPE nếu chuỗi là null hoặc khoảng trắng, nhưng trên cùng một dòng, bạn có thể kiểm tra null hoặc trống để bạn không kết thúc với một tấn (hơn ) khó định dạng nếu khối.
Nếu tôi hiểu đúng, điều này nên làm:
if(!stringname.isEmpty())
// an if to check if stringname is not null
if(stringname.isEmpy())
// an if to check if stringname is null
Chà, lần cuối cùng ai đó hỏi câu hỏi ngớ ngẩn này, câu trả lời là:
someString.equals("null")
Tuy nhiên, "sửa chữa" này chỉ che giấu vấn đề lớn hơn là làm thế nào để null
trở thành "null"
ngay từ đầu.
Có hai cách để thực hiện điều đó..Say String == null hoặc 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);
}
}
Kiểm tra ví dụ này..Đây là một ví dụ khác về phiên bản phím tắt của If Else ..