# 必备字符串操作
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种:
- 基本操作方法
- 字符串判空、比较
- 字符串截取和拆分
- 字符串查找和替换
- 字符串和其他类型数据的转换
- 字符串拼接和格式化
后面几节课我们会详细介绍每个操作。
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、总结
到底应该怎么选择判空方法呢,请看下面的总结。
学会这个,再也不用被老员工鄙视了。
请收藏好下图:
以上就是本期内容,希望对新入行的你有帮助。
我是Pandas,专注Java编程实用技术分享,公众号
Java实用技术手册
和B站均有视频解说,欢迎来玩。如果你觉得这篇文章有用,别忘了点赞+关注,一起进步!