如何检查我的string是否等于null?
我只想执行一些操作,如果我的string有一个有意义的值。 所以,我试了这个。
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 }
而且在所有情况下,尽pipe我的string是空的,但我的程序还是做了一些事情。 它等于null
。 那么,那有什么问题呢?
添加:
我find了问题的原因。 variables被声明为一个string,因此,赋给这个variables的"null"
被转换为"null"
! 所以, if (!myString.equals("null"))
作品。
if (myString != null && !myString.isEmpty()) { // doSomething }
作为进一步的评论,你应该在equals
合同中意识到这个词:
来自Object.equals(Object)
:
对于任何非null的引用值
x
,x.equals(null)
应该return false
。
与null
比较的方式是使用x == null
和x != null
。
此外,如果x == null
,则x.field
和x.method()
会抛出NullPointerException
。
如果myString
为null
,则调用myString.equals(null)
或myString.equals("")
将会失败,并返回NullPointerException
。 您无法调用nullvariables上的任何实例方法。
先检查null,如下所示:
if (myString != null && !myString.equals("")) { //do something }
如果myString
未通过空检查,则使用短路评估来不尝试.equals
。
Apache commons StringUtils.isNotEmpty
是最好的方法。
如果myString实际上是null,那么对引用的任何调用都将失败,并产生空指针exception(NPE)。 由于Java 6,使用#isEmpty代替长度检查(在任何情况下,不要使用检查创build一个新的空string)。
if (myString !=null && !myString.isEmpty()){ doSomething(); }
顺便说一句,如果像你一样与string文字进行比较,会颠倒语句,以便不必有空检查,即,
if (("some string to check").equals(myString)){ doSomething(); }
代替 :
if (myString !=null && !myString.equals("some string to check")){ doSomething(); }
如果你的string为null,像这样的调用应该抛出一个NullReferenceException:
myString.equals(空)
但无论如何,我认为这样的方法是你想要的:
public static class StringUtils { public static bool isNullOrEmpty(String myString) { return myString == null || "".equals(myString); } }
然后在你的代码中,你可以做这样的事情:
if (!StringUtils.isNullOrEmpty(myString)) { doSomething(); }
你需要检查myString
对象是否为null
:
if (myString != null) { doSomething }
尝试,
myString!=null && myString.length()>0
if (myString != null && myString.length() > 0) { // your magic here }
可以肯定的是,如果你正在做大量的string操作,那么Spring类有很多有用的方法:
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/util/StringUtils.html
我会鼓励使用现有的实用程序,或创build自己的方法:
public static boolean isEmpty(String string) { return string == null || string.length() == 0; }
然后在需要时使用它:
if (! StringUtils.isEmpty(string)) { // do something }
如上所述,|| 和&&运营商短路。 这意味着只要他们能确定他们的价值,他们就会停下来。 所以如果(string == null)是真的,那么长度部分不需要被评估,因为expression式总是为真。 与&&同样,如果左侧为假,expression式总是为假,不需要进一步评估。
另外请注意,使用长度通常比使用.equals更好。 性能稍好(不多),不需要创build对象(尽pipe大多数编译器可能会优化)。
每次我必须处理string(几乎每次),我都停下来想知道哪种方法真的是检查空string的最快方法。 当然,string.Length == 0检查应该是最快的,因为Length是一个属性,除了检索属性的值之外,不应该进行任何处理。 但后来我问自己,为什么有一个String.Empty? 检查String.Empty比检查长度要快,我告诉自己。 那么我finnaly决定testing一下。 我编写了一个小型的Windows控制台应用程序,告诉我需要多长时间才能完成一千万次的复制检查。 我检查了3个不同的string:一个NULLstring,一个空string和一个“”string。 我使用了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 = ""
,则会导致错误。 然后你有2个绑在第二位: String.IsNullOrEmpty()
和str == null || str.length == 0
str == null || str.length == 0
。 由于String.IsNullOrEmpty()
看起来更好,写起来更容易(也更快),所以我build议使用它来通过另一个解决scheme。
工作!
if (myString != null && !myString.isEmpty()) { return true; } else{ return false; }
我会做这样的事情:
( myString != null && myString.length() > 0 ) ? doSomething() : System.out.println("Non valid String");
- testingnull检查myString是否包含String的一个实例。
- length()返回长度,相当于equals(“”)。
- 检查myString是否为空将避免NullPointerException。
这应该工作:
if (myString != null && !myString.equals("")) doSomething }
如果没有,那么myString可能有一个你不期待的值。 试试这样打印出来:
System.out.println("+" + myString + "+");
使用'+'符号来包围string会告诉你是否有额外的空白,你没有考虑。
if(str.isEmpty() || str==null){ do whatever you want }
我一直在使用StringUtil.isBlank(string)
它testing一个string是否为空:null,emtpy或者只有空格。
所以这一个是迄今为止最好的
这是来自文档的原始方法
/** * 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; }
我有这个问题在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 }
读取StringUtils.isBlank()与String.isEmpty() 。
在Android中,你可以用TextUtils
实用方法isEmpty
来检查,
public static boolean isEmpty(CharSequence str) { return str == null || str.length() == 0; }
isEmpty(CharSequence str)
方法检查两个条件,为null
和length。
好的,这是数据types如何在Java中工作。 (你不得不原谅我的英文,我可能不会使用正确的词汇,你必须区分它们中的两个,基本的数据types和正常的数据types,基本的数据types几乎构成了存在的一切。都是数字,字符,布尔等。正常的数据types或复杂的数据types是其他的一切。一个string是一个字符数组,因此是一个复杂的数据types。
您创build的每个variables实际上都是您内存中值的指针。 例如:
String s = new String("This is just a test");
variables“s”不包含一个string。 这是一个指针。 这个指针指向你内存中的variables。 当你调用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
“@”后面的所有内容都是指针。 这只适用于复杂的数据types。 原始数据types直接保存在指针中。 所以实际上没有指针,值直接存储。
例如:
int i = 123;
在这种情况下,我不存储指针。 我将存储整数值123(以字节为单位)。
好吧,让我们回到==
运算符。 它总是比较指针而不是保存在内存中指针位置的内容。
例:
String s1 = new String("Hallo"); String s2 = new String("Hallo"); System.out.println(s1 == s2); >>>>> false
这两个string都有不同的指针。 String.equals(String other)会比较内容。 您可以将基本数据types与'=='运算符进行比较,因为具有相同内容的两个不同对象的指针是相等的。
空将意味着指针是空的。 空数据types默认为0(数字)。 对于任何复杂的对象来说,null表示该对象不存在。
问候
我认为myString不是一个string,而是一个string数组。 这是你需要做的:
String myNewString = join(myString, "") if (!myNewString.equals("")) { //Do something }
你可以检查string等于null使用这个:
String Test = null; (Test+"").compareTo("null")
如果结果为0,则(Test +“”)=“null”。
我尝试了大多数上面给出的Android应用程序中的null的例子,正在build设和IT全部失败。 所以我想出了一个随时为我工作的解决scheme。
String test = null+""; If(!test.equals("null"){ //go ahead string is not null }
所以简单地连接一个空string,如上所述,并testing“null”,它工作正常。 事实上并没有例外
exception也可能有所帮助:
try { //define your myString } catch (Exception e) { //in that case, you may affect "" to myString myString=""; }
对我来说,最好的检查一个string是否有任何有意义的Java内容是这样的:
string != null && !string.trim().isEmpty()
首先检查string是否为null
以避免NullPointerException
,然后修剪所有空格字符以避免检查只有空格的string,最后检查修剪后的string是否为空,即长度为0。
if(str != null).
你必须检查if(str != null).