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

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

# 必备字符串操作

1、String实用操作

String定义

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


String的源码定义:

publicfinalclassStringimplementsjava.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */privatefinalcharvalue[];
/** Cache the hash code for the string */privateinthash; // Default to 0//...}   


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

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

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


String操作

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

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

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


2、字符串基本操作方法

创建字符串

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

Strings1;
Strings2=null;
// 最常用:初始化一个字符串"a"Strings3="a"; 
// 使用字节数组新建,适用于很多IO流编解码方法byte[] bytes= {97, 98};
Strings4=newString(bytes); 
// 通过对象的 toString 方法新建,注意非空判断Strings5=xxObject.toString();

大厂不允许使用的方法:

// 多new一次字符串,浪费性能和内存 的方法Strings21=newString("a"); 
// 没有道理地硬转 的方法Strings22=1+""; 

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


字符串基本操作

// 获取长度String.length();
// 最常用:比较字符串的内容Sring.equals(ObjectanObject);
//  获取字节数组Sring.getBytes()

3、字符串判空方法

字符串原生方法

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

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

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

Strings1=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和""。
publicstaticbooleanisEmpty(CharSequencecs) {
returncs==null||cs.length() ==0;
}
  • isBlank 也能排除null和"",但是这个方法还排除了空白字符。
publicstaticbooleanisBlank(CharSequencecs) {
intstrLen=length(cs);
if (strLen==0) {
returntrue;
    } else {
for(inti=0; i<strLen; ++i) {
if (!Character.isWhitespace(cs.charAt(i))) { // 关键代码returnfalse;
            }
        }
returntrue;
    }
}

什么是空白字符?

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

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


4、测试demo

packagecom.example.javatech.lesson4;
importorg.apache.commons.lang3.StringUtils;
/*** Java实用技术手册 By Pandas。** @author Pandas* @date 2021/9/12*/publicclassStringEmptyBlankDemo {
/*** 判断字符串为空?* 超过一半程序员不知道用哪个好!** @param args 参数*/publicstaticvoidmain(String[] args) {
Strings1=null;
Strings2="";
Strings3="  \t\r\n "; // 应该用哪个方法?char[] bytes= {97};
System.out.println(newString(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, isBlankSystem.out.println("StringUtils.isEmpty --> "+StringUtils.isEmpty(s3));
System.out.println("StringUtils.isBlank --> "+StringUtils.isBlank(s3));
    }
}

5、总结

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

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


请收藏好下图:

字符串判空操作.png

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


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

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


相关文章
|
26天前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
99 60
|
16天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
36 6
|
18天前
|
JSON 前端开发 JavaScript
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
33 1
|
26天前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
31 7
|
28天前
|
移动开发 前端开发 Java
过时的Java技术盘点:避免在这些领域浪费时间
【10月更文挑战第14天】 在快速发展的Java生态系统中,新技术层出不穷,而一些旧技术则逐渐被淘汰。对于Java开发者来说,了解哪些技术已经过时是至关重要的,这可以帮助他们避免在这些领域浪费时间,并将精力集中在更有前景的技术上。本文将盘点一些已经或即将被淘汰的Java技术,为开发者提供指导。
55 7
|
24天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
39 3
|
24天前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
13 2
|
26天前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
27 4
|
24天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
22 1
|
24天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
37 1
下一篇
无影云桌面