Android开发Android开发经验谈Android技术知识

判断字符串是否为空

2017-12-16  本文已影响35人  叁点水

判断字符串是否为空是在 Android 开发中是最长用的一个判断,判断时也经常会看到有不同的判断方式,今天专门研究了一下,记录下来。

先定义一个字符串,

private String s;

这种定义方式是我们学用的方式,那么这样定义时在字符串时,该怎么判断它是不是空呢?来用代码验证一下:

if (s == null){
    Log.e("MainActivity", "s == null");
}else {
    Log.e("MainActivity", "s");
}

打出的来 log 是这样的:

12-13 22:57:01.693 5129-5129/com.example.dddd.myapplication E/MainActivity: s == null

可以看到这个时候,如果 s 没有赋值,它就为 null。

现在做一个小改动,这样定义字符串,

private String s = new String();

这时我们这这样来判断,

if (s == null){
    Log.e("MainActivity", "s == null");
}else if (s.isEmpty()){
    Log.e("MainActivity", "s is empty");
}else {
    Log.e("MainActivity", "s");

}

这样打出来的 log 是这样的:

12-13 23:06:35.263 6017-6017/com.example.dddd.myapplication E/MainActivity: s is empty

当用 new 关键字创建字符串对象时,如果 s 没有赋值,那么这时的 s 并不是 null,而它的 isEmpty()方法为 true,这时进入到 isEmpty()方法中去看看,

/**
 * Returns {@code true} if, and only if, {@link #length()} is {@code 0}.
 *
 * @return {@code true} if {@link #length()} is {@code 0}, otherwise
 * {@code false}
 *
 * @since 1.6
 */
public boolean isEmpty() {
    // Empty string has {@code count == 0} with or without string compression enabled.
    return count == 0;
}

可以看到只有当字符串的长度为 0 时,才会返回 true。所有用 new 关键字创建的字符串对象在没有赋值的情况下它的长度是 0 ,但并不是 null。

还有一个方法是用 TextUtils.isEmpty() 这个方法来判断

if (TextUtils.isEmpty(string)){
    Log.d("MainActivity", "string.isempty");
}

进入到这个方法里面去看一看:

/**
 * 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(@Nullable CharSequence str) {
    return str == null || str.length() == 0;
}

可以看到这个方法是当字符串为 null 或长度为 0 时,返回 true,与 String 的 isEmpty()方法比起来,这个方法更严谨一些,所以可以尽量使用这个方法来避免字符串的空指针异常。

还有一个经常用的判断方法就是 if(s == ""),这个就很简单了,就不多言了。

总结:当没有用 new 关键字创建字符串对象,或是没有 s = "",这两种创建方式的话,是不能用 isEmpty()方法来判断的,那样的话会报空指针异常。所以在判断字符串是否为空时要注意这一点,避免报错。

上一篇下一篇

猜你喜欢

热点阅读