我想只在我的字符串有一个有意义的值时执行一些操作。所以,我试过了。
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
}
在所有情况下我的程序doSomething
尽管我的字符串是EMPTY。它等于null
。那么,那有什么问题?
增加:
我找到了问题的原因。该变量被声明为一个字符串,因此,分配给该变量的null
被转换为"null"
!所以,if (!myString.equals("null"))
有效。
答案 0 :(得分:219)
if (myString != null && !myString.isEmpty()) {
// doSomething
}
作为进一步的评论,您应该了解equals
合同中的这个术语:
对于任何非空引用值
x
,x.equals(null)
应为return false
。
与null
进行比较的方法是使用x == null
和x != null
。
此外,如果x.field
,x.method()
和NullPointerException
会引发x == null
。
答案 1 :(得分:26)
如果myString
为null
,则调用myString.equals(null)
或myString.equals("")
将失败并显示NullPointerException
。您无法在空变量上调用任何实例方法。
首先检查null,如下所示:
if (myString != null && !myString.equals("")) {
//do something
}
如果.equals
无法进行空检查,则short-circuit evaluation使用{{3}}不会尝试myString
。
答案 2 :(得分:18)
Apache commons StringUtils.isNotEmpty
是最好的方式。
答案 3 :(得分:10)
如果myString实际上为null,那么对引用的任何调用都将失败,并带有Null Pointer Exception(NPE)。 从java 6开始,使用#isEmpty而不是长度检查(在任何情况下都不要用支票创建一个新的空字符串)。
if (myString !=null && !myString.isEmpty()){
doSomething();
}
顺便说一句,如果像你一样比较字符串文字,则会颠倒语句,以便不必进行空检查,即
if (("some string to check").equals(myString)){
doSomething();
}
而不是:
if (myString !=null && !myString.equals("some string to check")){
doSomething();
}
答案 4 :(得分:6)
工作!!!!
if (myString != null && !myString.isEmpty()) {
return true;
}
else {
return false;
}
答案 5 :(得分:5)
您需要检查myString
对象是否为null
:
if (myString != null) {
doSomething
}
答案 6 :(得分:5)
如果你的字符串为null,那么这样的调用应该抛出NullReferenceException:
myString.equals(空)
但无论如何,我认为这样的方法就是你想要的:
public static class StringUtils
{
public static bool isNullOrEmpty(String myString)
{
return myString == null || "".equals(myString);
}
}
然后在您的代码中,您可以执行以下操作:
if (!StringUtils.isNullOrEmpty(myString))
{
doSomething();
}
答案 7 :(得分:4)
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
答案 8 :(得分:4)
我鼓励使用现有的实用程序,或创建自己的方法:
public static boolean isEmpty(String string) {
return string == null || string.length() == 0;
}
然后在需要时使用它:
if (! StringUtils.isEmpty(string)) {
// do something
}
如上所述,||和&&运营商短路。这意味着一旦他们能够确定他们的价值,他们就会停止。因此,如果(string == null)为true,则不需要计算长度部分,因为表达式始终为true。与&&同样,如果左侧为假,则表达式始终为false,无需进一步评估。
作为补充说明,使用长度通常比使用.equals更好。性能略好(不多),并且不需要创建对象(尽管大多数编译器可能会优化它)。
答案 9 :(得分:4)
每次我必须处理字符串(几乎每次)我停下来想知道哪种方式是检查空字符串的最快方法。当然string.Length == 0检查应该是最快的,因为Length是一个属性,除了检索属性的值之外,不应该有任何处理。但后来我问自己,为什么会有一个String.Empty?检查String.Empty应该比检查长度更快,我告诉自己。好吧,我最终决定测试它。我编写了一个小型Windows控制台应用程序,告诉我对1000万次重复进行某项检查需要多长时间。我检查了3个不同的字符串:NULL字符串,空字符串和“”字符串。我使用了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
。由于String.IsNullOrEmpty()
看起来更好,编写更容易(也更快),我建议将其用于其他解决方案。
答案 10 :(得分:4)
尝试,
myString!=null && myString.length()>0
答案 11 :(得分:3)
我会做这样的事情:
( myString != null && myString.length() > 0 )
? doSomething() : System.out.println("Non valid String");
答案 12 :(得分:3)
我一直在使用StringUtil.isBlank(string)
它测试字符串是否为空:null,emtpy或只有空格。
所以到目前为止这个是最好的
以下是docs中的orignal方法
/**
* 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;
}
答案 13 :(得分:2)
if(str.isEmpty() || str==null){
do whatever you want
}
答案 14 :(得分:2)
这应该有效:
if (myString != null && !myString.equals(""))
doSomething
}
如果没有,那么myString可能有一个你不期望的值。尝试将其打印出来:
System.out.println("+" + myString + "+");
使用'+'符号围绕字符串将显示您是否有额外的空白,而您没有考虑。
答案 15 :(得分:2)
对我来说,最好检查字符串中是否有任何有意义的Java内容:
string != null && !string.trim().isEmpty()
首先检查字符串是否为null
以避免NullPointerException
,然后修剪所有空格字符以避免检查只有空格的字符串,最后检查修剪后的字符串是否为空,即长度为0。
答案 16 :(得分:1)
好的,这就是数据类型在Java中的工作方式。 (你不得不原谅我的英语,我很遗憾。没有使用正确的词汇。 你必须区分其中两个。基本数据类型和普通数据类型。基本数据类型几乎构成了存在的所有内容。 例如,有所有数字,char,boolean等。 普通数据类型或复杂数据类型是其他所有内容。 String是一个字符数组,因此是一种复杂的数据类型。
您创建的每个变量实际上都是指向内存中值的指针。 例如:
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(以字节为单位)。
好的,让我们回到==
运营商。
它总是比较指针而不是内存中指针位置保存的内容。
示例:
String s1 = new String("Hallo");
String s2 = new String("Hallo");
System.out.println(s1 == s2);
>>>>> false
这两个String都有不同的指针。然而,String.equals(String other)比较内容。您可以将原始数据类型与'=='运算符进行比较,因为具有相同内容的两个不同对象的指针是相等的。
Null意味着指针为空。默认情况下,空原始数据类型为0(对于数字)。但是,对于任何复杂对象,Null意味着该对象不存在。
问候
答案 17 :(得分:1)
我总是这样使用:
if (mystr != null && !mystr.isEmpty()){
//DO WHATEVER YOU WANT OR LEAVE IT EMPTY
}else {
//DO WHATEVER YOU WANT OR LEAVE IT EMPTY
}
或者您可以将其复制到您的项目中:
private boolean isEmptyOrNull(String mystr){
if (mystr != null && !mystr.isEmpty()){ return true; }
else { return false; }
}
,然后像这样调用它:
boolean b = isEmptyOrNull(yourString);
如果为空或为空,将返回true。
b=true
如果为空或为空
或者您可以使用try catch并在其为空时捕获。
答案 18 :(得分:1)
在Android中,您可以使用isEmpty
,
TextUtils
进行检查
public static boolean isEmpty(CharSequence str) {
return str == null || str.length() == 0;
}
isEmpty(CharSequence str)
方法检查条件,null
和长度。
答案 19 :(得分:1)
我更喜欢使用:
if(!StringUtils.isBlank(myString)) { // checks if myString is whitespace, empty, or null
// do something
}
答案 20 :(得分:1)
我在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);
}
答案 21 :(得分:0)
我尝试了上面给出的大多数示例,因为我在Android应用程序中构建了一个null并且IT全部失败了。所以我想出了一个适合我的解决方案。
String test = null+"";
If(!test.equals("null"){
//go ahead string is not null
}
所以简单地连接一个空字符串,如上所述,并测试&#34; null&#34;它工作正常。事实上没有抛出异常
答案 22 :(得分:0)
例外也可能有所帮助:
try {
//define your myString
}
catch (Exception e) {
//in that case, you may affect "" to myString
myString="";
}
答案 23 :(得分:0)
您可以使用以下方法检查字符串是否为null:
String Test = null;
(Test+"").compareTo("null")
如果结果为0则(Test +“”)=“null”。
答案 24 :(得分:0)
我认为myString不是字符串而是字符串数组。以下是您需要做的事情:
{{1}}
答案 25 :(得分:0)
如果您使用的是Android,则可以使用简单的TextUtils类。 检查以下代码:
if(!TextUtils.isEmpty(myString)){
//do something
}
这是简单的代码用法。答案可能会重复。但是为您进行一次简单的检查很简单。
答案 26 :(得分:-5)
您必须使用null if(str != null).