私の文字列に意味のある値がある場合にのみ、何らかのアクションを実行したいと思います。だから、私はこれを試しました。
if (!myString.equals("")) {
doSomething
}
この
if (!myString.equals(null)) {
doSomething
}
この
if ( (!myString.equals("")) && (!myString.equals(null))) {
doSomething
}
この
if ( (!myString.equals("")) && (myString!=null)) {
doSomething
}
この
if ( myString.length()>0) {
doSomething
}
そして、私の文字列IS EMPTYという事実にもかかわらず、私のプログラムdoSomething
はすべての場合において。これはnull
と同じです。それで、それは何が悪いのですか?
追加:
私はその問題の原因を見つけました。変数は文字列として宣言されているため、この変数に割り当てられたnull
は"null"
!に変換されました。だから、if (!myString.equals("null"))
はうまくいきます。
if (myString != null && !myString.isEmpty()) {
// doSomething
}
さらなるコメントとして、あなたはequals
契約でこの用語を知っているべきです:
Null以外の参照値
x
については、x.equals(null)
をreturn false
にする必要があります。
null
と比較する方法はx == null
とx != null
を使うことです。
さらに、x.field
の場合、x == null
およびx.method()
はNullPointerException
をスローします。
myString
がnull
の場合、myString.equals(null)
またはmyString.equals("")
の呼び出しはNullPointerException
で失敗します。 null変数に対してインスタンスメソッドを呼び出すことはできません。
このように最初にnullをチェックします。
if (myString != null && !myString.equals("")) {
//do something
}
これはmyString
がnullチェックに失敗した場合に.equals
を試みないように 短絡評価 を利用します。
Apache commons StringUtils.isNotEmpty
が一番いい方法です。
MyStringが実際にはnullの場合、参照への呼び出しはすべてNULLポインタ例外(NPE)で失敗します。 Java 6以降では、長さチェックの代わりに#isEmptyを使用してください(いずれの場合もチェックで新しい空の文字列を作成しないでください)。
if (myString !=null && !myString.isEmpty()){
doSomething();
}
ちなみに、文字列リテラルと比較した場合、nullチェックを行わないようにするために、ステートメントを逆にします。
if (("some string to check").equals(myString)){
doSomething();
}
の代わりに :
if (myString !=null && !myString.equals("some string to check")){
doSomething();
}
WORKING !!!!
if (myString != null && !myString.isEmpty()) {
return true;
}
else {
return false;
}
myString
オブジェクトがnull
であることを確認する必要があります。
if (myString != null) {
doSomething
}
文字列がnullの場合、このような呼び出しはNullReferenceExceptionをスローします。
myString.equals(null)
しかし、とにかく、私はこのような方法があなたが望むものであると思います:
public static class StringUtils
{
public static bool isNullOrEmpty(String myString)
{
return myString == null || "".equals(myString);
}
}
それからあなたのコードで、あなたはこのようなことをすることができます:
if (!StringUtils.isNullOrEmpty(myString))
{
doSomething();
}
やってみる
myString!=null && myString.length()>0
私は文字列を扱わなければならないたびに(ほとんど毎回)私は停止し、どの方法が本当に空の文字列をチェックするための最速の方法であるか疑問に思います。もちろん、Lengthはプロパティなので、string.Length == 0のチェックが最も速いはずです。プロパティの値を取得する以外の処理はありません。しかし、私は自分自身に尋ねる、なぜString.Emptyがあるのですか? String.Emptyの長さよりもチェックする方が速いはずです。まあ私は最終的にそれを試してみることにしました。私は小さなWindowsコンソールアプリケーションをコーディングしました。これは、1000万回のレピュテーションを確認するのにかかる時間を教えてくれます。 NULL文字列、空文字列、 ""文字列の3種類の文字列をチェックしました。私は5つの異なるメソッドを使いました:String.IsNullOrEmpty()、str == null、str == null || str == String.Empty、str == null || str == ""、str == null || str.length ==0。以下が結果です。
String.IsNullOrEmpty()
NULL = 62 milliseconds
Empty = 46 milliseconds
"" = 46 milliseconds
str == null
NULL = 31 milliseconds
Empty = 46 milliseconds
"" = 31 milliseconds
str == null || str == String.Empty
NULL = 46 milliseconds
Empty = 62 milliseconds
"" = 359 milliseconds
str == null || str == ""
NULL = 46 milliseconds
Empty = 343 milliseconds
"" = 78 milliseconds
str == null || str.length == 0
NULL = 31 milliseconds
Empty = 63 milliseconds
"" = 62 milliseconds
これらの結果によると、平均的にstr == null
のチェックが最速ですが、常に探しているものが得られるとは限りません。 if str = String.Empty
またはstr = ""
はfalseになります。次に、2つめの2つ、String.IsNullOrEmpty()
とstr == null || str.length == 0
があります。 String.IsNullOrEmpty()
は見栄えがよくそして書くのがより簡単(そしてより速い)なので、私は他の解決策よりもそれを使うことを勧めます。
if (myString != null && myString.length() > 0) {
// your magic here
}
偶然にも、あなたが多くの文字列操作をしているなら、あらゆる種類の便利なメソッドを持つすばらしいSpringクラスがあります。
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/StringUtils.html
既存のユーティリティを使用するか、独自の方法を作成することをお勧めします。
public static boolean isEmpty(String string) {
return string == null || string.length() == 0;
}
必要なときにそれを使用してください。
if (! StringUtils.isEmpty(string)) {
// do something
}
上記のように、|| &&演算子がショートしています。それは、彼らが自分たちの価値を決定することができるとすぐに彼らが止まることを意味します。したがって、(string == null)がtrueの場合、式は常にtrueになるため、長さの部分を評価する必要はありません。 &&と同様に、左側が偽の場合、式は常に偽であり、それ以上評価する必要はありません。
追加の注意として、長さを使用することは一般的に.equalsを使用するより良い考えです。パフォーマンスはやや優れていますが(大したことはありません)、オブジェクトを作成する必要はありません(ほとんどのコンパイラはこれを最適化する可能性があります)。
StringUtil.isBlank(string)
を使用しています
文字列が空白かどうかをテストします:null、空、または空白のみ
これが今までで最高です
ここにドキュメントからの元の方法があります
/**
* Tests if a string is blank: null, emtpy, or only whitespace (" ", \r\n, \t, etc)
* @param string string to test
* @return if string is blank
*/
public static boolean isBlank(String string) {
if (string == null || string.length() == 0)
return true;
int l = string.length();
for (int i = 0; i < l; i++) {
if (!StringUtil.isWhitespace(string.codePointAt(i)))
return false;
}
return true;
}
私はこのようなことをしたいと思います:
( myString != null && myString.length() > 0 )
? doSomething() : System.out.println("Non valid String");
これはうまくいくはずです。
if (myString != null && !myString.equals(""))
doSomething
}
そうでなければ、myStringはおそらくあなたが期待していない値を持っています。このように印刷してみてください。
System.out.println("+" + myString + "+");
文字列を囲むために「+」記号を使用すると、余分な空白があるかどうかがわかりません。
if(str.isEmpty() || str==null){ do whatever you want }
私にとっては、文字列にJavaで意味のある内容が含まれているかどうかを確認するには、次のようにします。
string != null && !string.trim().isEmpty()
最初にnull
を避けるために文字列がNullPointerException
であるかどうかをチェックし、次に空白しかない文字列をチェックしないようにすべてのスペース文字をトリミングし、最後にトリミングされた文字列が空でない、つまり長さ0かどうかをチェックします。
さて、これはデータ型がJavaでどのように機能するかです。 (あなたは私の英語を言い訳する必要があります。正しい語彙を使用しないでください。2つを区別する必要があります。基本データ型と通常のデータ型。基本データ型は、ほとんどすべてを構成しています。通常のデータ型または複合データ型はそれ以外のすべてのものです文字列は文字の配列であるため、複合データ型です。
作成したすべての変数は、実際にはメモリ内の値へのポインタです。例えば:
String s = new String("This is just a test");
変数 "s"は文字列を含みません。それはポインタです。このポインタは、メモリ内の変数を指しています。 System.out.println(anyObject)
を呼び出すと、そのオブジェクトのtoString()
メソッドが呼び出されます。 ObjectのtoString
をオーバーライドしなかった場合は、ポインタを表示します。例えば:
public class Foo{
public static void main(String[] args) {
Foo f = new Foo();
System.out.println(f);
}
}
>>>>
>>>>
>>>>Foo@330bedb4
"@"の後ろにあるものはすべてポインタです。これは複雑なデータ型に対してのみ機能します。プリミティブデータ型はそれらのポインタに直接保存されます。そのため、実際にはポインタはなく、値は直接格納されます。
例えば:
int i = 123;
この場合、ポインタを格納しません。整数値123(バイト数c)を格納します。
それでは==
演算子に戻りましょう。常にポインタを比較し、メモリ内のポインタの位置に保存されているコンテンツは比較しません。
例:
String s1 = new String("Hallo");
String s2 = new String("Hallo");
System.out.println(s1 == s2);
>>>>> false
この両方のStringは異なるポインタを持ちます。 String.equals(String other)ただし、コンテンツを比較します。同じ内容を持つ2つの異なるオブジェクトのポインタは等しいため、プリミティブデータ型を '=='演算子と比較できます。
NULLはポインタが空であることを意味します。デフォルトでは空のプリミティブデータ型は0です(数値の場合)。しかし、どんな複雑なオブジェクトに対してもNULLは、そのオブジェクトが存在しないことを意味します。
ご挨拶
Androidでは、isEmpty
のユーティリティメソッドTextUtils
でこれをチェックできます。
public static boolean isEmpty(CharSequence str) {
return str == null || str.length() == 0;
}
isEmpty(CharSequence str)
メソッドは、null
とlengthの両方の条件をチェックします。
私はAndroidでこの問題を抱えていて、私はこの方法を使っています(私のために働きます):
String test = null;
if(test == "null"){
// Do work
}
しかし、Javaコードで私は使用します:
String test = null;
if(test == null){
// Do work
}
そして:
private Integer compareDateStrings(BeanToDoTask arg0, BeanToDoTask arg1, String strProperty) {
String strDate0 = BeanUtils.getProperty(arg0, strProperty);_logger.debug("strDate0 = " + strDate0);
String strDate1 = BeanUtils.getProperty(arg1, strProperty);_logger.debug("strDate1 = " + strDate1);
return compareDateStrings(strDate0, strDate1);
}
private Integer compareDateStrings(String strDate0, String strDate1) {
int cmp = 0;
if (isEmpty(strDate0)) {
if (isNotEmpty(strDate1)) {
cmp = -1;
} else {
cmp = 0;
}
} else if (isEmpty(strDate1)) {
cmp = 1;
} else {
cmp = strDate0.compareTo(strDate1);
}
return cmp;
}
private boolean isEmpty(String str) {
return str == null || str.isEmpty();
}
private boolean isNotEmpty(String str) {
return !isEmpty(str);
}
私は使うのが好きです:
if(!StringUtils.isBlank(myString)) { // checks if myString is whitespace, empty, or null
// do something
}
Androidで作業している場合は、単純なTextUtilsクラスを使用できます。次のコードを確認してください。
if(!TextUtils.isEmpty(myString)){
//do something
}
これはコードの簡単な使い方です。答えは繰り返されるかもしれません。しかし、あなたのための単一で簡単なチェックを持つのは簡単です。
私は、Androidアプリのnullが構築中で、ITがすべて失敗したために上記の例のほとんどを試しました。だから私はいつでも私のために働いた解決策を思い付きました。
String test = null+"";
If(!test.equals("null"){
//go ahead string is not null
}
ですから、上記のように単に空の文字列を連結して "null"に対してテストすればうまくいきます。実際には例外はスローされません
MyStringは文字列ではなく文字列の配列だと思います。これがあなたがする必要があることです:
String myNewString = join(myString, "")
if (!myNewString.equals(""))
{
//Do something
}
例外も役立ちます。
try {
//define your myString
}
catch (Exception e) {
//in that case, you may affect "" to myString
myString="";
}
これを使ってnullと等しい文字列をチェックすることができます。
String Test = null;
(Test+"").compareTo("null")
結果が0の場合、(Test + "")= "null"になります。