判断字符串是否为空

作者: 叁点水 | 来源:发表于2017-12-16 14:46 被阅读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()方法来判断的,那样的话会报空指针异常。所以在判断字符串是否为空时要注意这一点,避免报错。

    相关文章

      网友评论

        本文标题: 判断字符串是否为空

        本文链接:https://www.haomeiwen.com/subject/vimswxtx.html