开发者社区> Java实用技术@Pandas> 正文

【Java实用技术】必备字符串操作之判空

简介: 【Java实用技术】必备字符串操作之判空,isBlank和isEmpty区别是什么?
+关注继续查看

# 必备字符串操作

1、String实用操作

String定义

在java中,String类的使用频率是最高的,String就是我们常说的字符串。它是java的核心类,在java.lang包下面。


String的源码定义:

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
     /** The value is used for character storage. */
     private final char value[];

     /** Cache the hash code for the string */
     private int hash; // Default to 0
    
     //...
}   


从上述源码中我们可以得知:

  • String是final修饰的类,意味着不能被继承。
  • String类实现了Serializable、Comparable和CharSequence接口。
  • String类通过char数组存储,并且数组由私有final修饰,意味着创建后不可修改。

这些将有利于我们理解字符串的不可变性,有利于我们对字符串定义和比较。


String操作

我们将字符串操作分为下面6种:

  1. 基本操作方法
  2. 字符串判空、比较
  3. 字符串截取和拆分
  4. 字符串查找和替换
  5. 字符串和其他类型数据的转换
  6. 字符串拼接和格式化

后面几节课我们会详细介绍每个操作。


2、字符串基本操作方法

创建字符串

最常见的新建一个字符串方法是:

String s1;
String s2 = null;

// 最常用:初始化一个字符串"a"
String s3 = "a"; 

// 使用字节数组新建,适用于很多IO流编解码方法
byte[] bytes = {97, 98};
String s4 = new String(bytes); 

// 通过对象的 toString 方法新建,注意非空判断
String s5 = xxObject.toString();

大厂不允许使用的方法:

// 多new一次字符串,浪费性能和内存 的方法
String s21 = new String("a"); 

// 没有道理地硬转 的方法
String s22 = 1 + ""; 

不允许的方法在很多java编码规范中已经要求。


字符串基本操作

// 获取长度
String.length();

// 最常用:比较字符串的内容
Sring.equals(Object anObject);

//  获取字节数组
Sring.getBytes()

3、字符串判空方法

字符串原生方法

最常用的是判断为null和判断为空字符串。

这里的null是指String对象不存在。如果对其操作,会有空指针错误。

空字符串是指String对象存在,但是里面没有任何字符。一般业务场景中,需要排除它。

String s1 = null;
System.out.println("s1 == null --> " + (s1 == null));

// 如果s2 != null,还可以这么写
System.out.println("s2.isEmpty() --> " + s2.isEmpty()); 

// 安全的写法如下
 System.out.println("s2 == null || s2.isEmpty() --> " + (s2 == null || s2.isEmpty()));

字符串工具类

这里我们推荐org.apache.commons.lang3.StringUtils工具类。

它里面有2个常用的方法,可能超过一半程序员都不清楚有什么区别。

下面介绍StringUtils.isEmpty()StringUtils.isBlank()

  • isEmpty就是原生方法中的安全写法,它同时排除了null和""。
public static boolean isEmpty(CharSequence cs) {
    return cs == null || cs.length() == 0;
}
  • isBlank 也能排除null和"",但是这个方法还排除了空白字符。
public static boolean isBlank(CharSequence cs) {
    int strLen = length(cs);
    if (strLen == 0) {
        return true;
    } else {
        for(int i = 0; i < strLen; ++i) {
            if (!Character.isWhitespace(cs.charAt(i))) { // 关键代码
                return false;
            }
        }
        return true;
    }
}

什么是空白字符?

包含我们常见的空格" ",制表符\t,换行符\n,回车符\r以及不常见的Unicode定义的其他空白字符。

在特定的业务场景中,首先排除这些空白符对业务逻辑处理的干扰是很有必要的,比如通信网络传输。


4、测试demo

package com.example.javatech.lesson4;

import org.apache.commons.lang3.StringUtils;

/**
 * Java实用技术手册 By Pandas。
 *
 * @author Pandas
 * @date 2021/9/12
 */
public class StringEmptyBlankDemo {

    /**
     * 判断字符串为空?
     * 超过一半程序员不知道用哪个好!
     *
     * @param args 参数
     */
    public static void main(String[] args) {
        String s1 = null;
        String s2 = "";
        String s3 ="  \t\r\n "; // 应该用哪个方法?

        char[] bytes = {97};
        System.out.println(new String(bytes));
        
        System.out.println("s1 == null --> " + (s1 == null));
        System.out.println("s2.isEmpty() --> " + s2.isEmpty());
        System.out.println("s3.isEmpty() --> " + s3.isEmpty());
        System.out.println("s2 == null || s2.isEmpty() --> " + (s2 == null || s2.isEmpty()));

        System.out.println("=====================");
        // StringUtils -> isEmpty, isBlank
        System.out.println("StringUtils.isEmpty --> " + StringUtils.isEmpty(s3));
        System.out.println("StringUtils.isBlank --> " + StringUtils.isBlank(s3));
    }
}

5、总结

到底应该怎么选择判空方法呢,请看下面的总结。

学会这个,再也不用被老员工鄙视了。


请收藏好下图:

字符串判空操作.png

以上就是本期内容,希望对新入行的你有帮助。


我是Pandas,专注Java编程实用技术分享,公众号Java实用技术手册和B站均有视频解说,欢迎来玩。

如果你觉得这篇文章有用,别忘了点赞+关注,一起进步!


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
(JAVA):字符串查询操作----String类常见的API。
(JAVA):字符串查询操作----String类常见的API。
15 0
【Java实用技术】必备字符串操作之判空
【Java实用技术】必备字符串操作之判空,isBlank和isEmpty区别是什么?
276 0
【Java实用技术】字符串的截取用什么方法好?
【Java实用技术】字符串的截取用什么方法好?
54 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
19111 0
(JAVA):字符串修改操作------String类常见的API。
(JAVA):字符串修改操作------String类常见的API。
14 0
字符串常用操作
'''字符串的方法 s.index() s.rindex() s.find() s.rfind() s.count() s.replace() s.partition() s.
805 0
javascript随机生成字符串,可以用来生成随机密码
function generatePassword(length)  {      length = length || 32;      var source = "abcdefghzklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`0123456789-=//[];',.
547 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
23940 0
4
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载