Java'da bir dizeyi null değerine göre nasıl kontrol edebilirim? Ben kullanıyorum
stringname.equalsignorecase(null)
ama işe yaramıyor.
Java'da bir dizeyi null değerine göre nasıl kontrol edebilirim? Ben kullanıyorum
stringname.equalsignorecase(null)
ama işe yaramıyor.
Yanıtlar:
string == null
nesnenin boş olup olmadığını karşılaştırır. string.equals("foo")
o nesnenin içindeki değeri karşılaştırır. string == "foo"
her zaman işe yaramaz, çünkü nesnelerin temsil ettikleri değerlerin değil aynı olup olmadığını görmeye çalışıyorsunuz.
Daha uzun cevap:
Bunu denerseniz, bulduğunuz gibi işe yaramaz:
String foo = null;
if (foo.equals(null)) {
// That fails every time.
}
Bunun nedeni, foo'nun null olması, dolayısıyla .equals'ın ne olduğunu bilmemesidir; Eşit değerlerin çağrılabileceği bir nesne yoktur.
Muhtemelen istediğin şey şuydu:
String foo = null;
if (foo == null) {
// That will work.
}
Strings ile uğraşırken kendinizi boşa karşı korumanın tipik yolu şudur:
String foo = null;
String bar = "Some string";
...
if (foo != null && foo.equals(bar)) {
// Do something here.
}
Bu şekilde, eğer foo boşsa, koşulun ikinci yarısını değerlendirmez ve her şey yolunda gider.
Bir String değişmezi kullanıyorsanız (değişken yerine) kolay yol şudur:
String foo = null;
...
if ("some String".equals(foo)) {
// Do something here.
}
Bu konuda çalışmak istiyorsanız, Apache Commons'ın sıfır güvenli String işlemleri sağlayan bir StringUtils sınıfı vardır .
if (StringUtils.equals(foo, bar)) {
// Do something here.
}
Başka bir cevap şakaydı ve bunu yapman gerektiğini söyledi:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
Lütfen bunu yapma. Yalnızca istisnai hatalar için istisnalar atmalısınız; Boşluk bekliyorsanız, vaktinden önce kontrol etmeli ve istisnayı atmasına izin vermemelisiniz.
Kafamda bunun iki nedeni var. İlk olarak, istisnalar yavaştır; null değerine karşı denetim hızlıdır, ancak JVM bir istisna attığında, çok zaman alır. İkinci olarak, önceden boş göstericiyi kontrol ederseniz, kodun okunması ve bakımı çok daha kolaydır.
s == null
çalışmayacak mı?
equals()
karşılaştırmak istiyorsanız "yalnızca" kullanmanız gerekir . Ancak bir değişkenin olup olmadığını kontrol etmek istiyorsanız , kullanırsınız . null
==
Elbette işe yarıyor. Kodun hayati bir parçasını kaçırıyorsunuz. Sadece şunu yapman gerekiyor:
boolean isNull = false;
try {
stringname.equalsIgnoreCase(null);
} catch (NullPointerException npe) {
isNull = true;
}
;)
Android'de çalışıyorsanız TextUtils Yöntemini kullanın.
TextUtils.isEmpty (str) : Dize null veya 0-uzunlukluysa doğru döndürür. Parametreler: str incelenecek dizge Döndürür: str null veya sıfır uzunlukta ise true
if(TextUtils.isEmpty(str)) {
// str is null or lenght is 0
}
Aşağıda ise kaynak kod direclty kullanabileceğiniz bu method.You ait.
/**
* 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 yönteminin uygulanmasına bakarsak, bu bölümü buluyoruz:
if (string == null || count != string.count) {
return false;
}
Yani false
argüman ise her zaman geri dönecektir null
. Ve bu kesinlikle doğrudur, çünkü dönmesi gereken tek durum true
, equalsIgnoreCase'in a üzerinde çağrıldığı durumdur null String
, ancak
String nullString = null;
nullString.equalsIgnoreCase(null);
kesinlikle bir NullPointerException ile sonuçlanacaktır.
Yani eşittir yöntemleri, bir nesnenin boş olup olmadığını test etmek için tasarlanmamıştır, çünkü onları çağıramazsınız null
.
Bu biraz tuhaf görünüyor ama ...
stringName == null || "".equals(stringName)
Bunu bu şekilde yaparken hiçbir zaman sorun yaşamadım, ayrıca potansiyel boş nokta istisnalarından kaçınırken kontrol etmenin daha güvenli bir yoludur.
MYYN'nin cevabında neyin yanlış olduğundan emin değilim.
if (yourString != null) {
//do fun stuff with yourString here
}
Yukarıdaki boş kontrol oldukça uygundur.
Bir String referansının boş bir referans olmadığını bildiğiniz başka bir dizeye eşit olup olmadığını (büyük / küçük harfleri yok sayarak) kontrol etmeye çalışıyorsanız , o zaman şöyle bir şey yapın:
String x = "this is not a null reference"
if (x.equalsIgnoreCase(yourStringReferenceThatMightBeNull) ) {
//do fun stuff
}
Karşılaştırdığınız her iki Dizge için boş referanslarınız olup olmadığına dair herhangi bir şüpheniz varsa, NullPointerException olasılığını önlemek için bunlardan en az birinde boş bir referans olup olmadığını kontrol etmeniz gerekir.
Dizeniz "null" değerine sahipse, kullanabilirsiniz
if(null == stringName){
[code]
}
else
[Error Msg]
sınıfına aktar
import org.apache.commons.lang.StringUtils;
sonra kullan, ikisi de doğru dönecek
System.out.println(StringUtils.isEmpty(""));
System.out.println(StringUtils.isEmpty(null));
String == null ile kontrol edebilirsiniz
Bu benim için çalışıyor
String foo = null;
if(foo == null){
System.out.println("String is null");
}
Elbette user351809, stringname.equalsignorecase(null)
NullPointerException oluşturacaktır.
Bakın, stringname
olası 2 koşulu izleyen bir string nesneniz var : -
stringname
boş olmayan bir dize değerine sahip (örneğin "bilgisayar"): "computer".equalsignorecase(null)
false
.stringname
bir null
değeri vardır: null.equalsignorecase(null)
true
, null
uygulayabilecek bir nesne değildir equalsignorecase()
.Bu nedenle, 2. durum nedeniyle istisna elde edersiniz.
Size önerdiğim şey,stringname == null
Basit yöntem:
public static boolean isBlank(String value) {
return (value == null || value.equals("") || value.equals("null") || value.trim().equals(""));
}
Eğer value
iade null, kullanımıdır:
if(value.isEmpty());
Bazen java'da null kontrol etmek if(value == null)
, String null olsa bile doğru vermeyebilir.
if(value.isEmpty())
verir NullPointerException
. Bu durumda kullanmak daha iyidirif(value == null)
Java 7 ile kullanabilirsiniz
if (Objects.equals(foo, null)) {
...
}
true
her iki parametrenin de olması durumunda döndürülür null
.
Bunun uzun zaman önce yanıtlandığını fark ettim, ancak bunun yayınlandığını görmedim, bu yüzden yaptığımı paylaşacağımı düşündüm. Bu özellikle kod okunabilirliği için iyi değildir, ancak bir dizi boş kontrol yapmak zorunda kalırsanız, şunu kullanmayı severim:
String someString = someObject.getProperty() == null ? "" : someObject.getProperty().trim();
Bu örnekte, dize null veya boşluk olsaydı bir NPE atacak olan trim çağrılır, ancak aynı satırda, bir ton (daha fazlası ) bloklar ise biçimlendirmek zordur.
Doğru anladıysam, bunu yapmalı:
if(!stringname.isEmpty())
// an if to check if stringname is not null
if(stringname.isEmpty())
// an if to check if stringname is null
En son birisi bu saçma soruyu sorduğunda cevap şuydu:
someString.equals("null")
Bu "düzeltme" sadece nasıl daha büyük bir sorun gizler null
hale "null"
olsa da, ilk etapta.
Bunu yapmanın iki yolu vardır .. Dize == null veya 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);
}
}
Bu örneğe bakın ... İşte If Else'in kısayol sürümünün başka bir örneği.