String 常用工具类

叶举
2023-12-01


 

工具类封装的方法,相比于原生方法,往往做了很多额外校验、兼容、处理,比如校验了输入是否合法、兼容了NPE、判断了从其它地方获取的数据,使用起来要方便些。

apache的 common-lang3 工具类众多、方法齐全, 推荐使用。老版本类库是 commons-lang,新版本是 commons-lang3,尽量用 lang3 代替 lang。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.11</version>
</dependency>

 

commons-lang3的CharSequenceUtils

//CharSequence转char[]
char[] chars = CharSequenceUtils.toCharArray(charSequence);

//提取子串,从指定位置到末尾。null返回null
CharSequence charSequence = CharSequenceUtils.subSequence(charSequence, startIndex);

 

commons-lang3的StringUtils

常用常量

spring的StringUtils没有提供常量,common-lang3提供了一些字符串常量

//空串
String empty = StringUtils.EMPTY;

//换行符\n
String lf = StringUtils.LF;

//空格串,一个空格" "
String space = StringUtils.SPACE;

//找不到对应index时返回的-1
int indexNotFound = StringUtils.INDEX_NOT_FOUND;

 

is

//判断字符串是否为empty,null、空串都是empty
boolean b1 = StringUtils.isEmpty("xxx");
boolean b2 = StringUtils.isNotEmpty("xxx");

//判断字符串是否是blank,null、空串、空格串都是blank
boolean b3 = StringUtils.isBlank("xxx");
boolean b4 = StringUtils.isNotBlank("xxx");


//其中一些字符串是否是empty|blank的
boolean anyEmpty = StringUtils.isAnyEmpty(str1, str2, str3);
boolean anyBlank = StringUtils.isAnyBlank(str1, str2, str3);

//这些字符串是全部是empty|blank的
boolean allEmpty = StringUtils.isAllEmpty(str1, str2, str3);
boolean allBlank = StringUtils.isAllBlank(str1, str2, str3);


//字符串是否只包含阿拉伯数字。小数点、正负号不属于阿拉伯数字,返回false;null、空串返回false
boolean numeric = StringUtils.isNumeric(str);
//字符串是否只包含英文字母,null、空串返回false
boolean alpha = StringUtils.isAlpha(str);
//字符串是否是空白符(空串、空格串),null返回false
boolean whitespace = StringUtils.isWhitespace(str);

empty、blank的异同点:都包含了null、空串,blank还包含了空格串。

 

equals

//比较2个字符串是否equals
boolean equals1 = StringUtils.equals(str1, str2);
boolean equals2 = StringUtils.equalsIgnoreCase(str1, str2);

//是否和指定字符串中的某一个equals
boolean equals3 = StringUtils.equalsAny(str, str1, str2, str3);
boolean equals4 = StringUtils.equalsAnyIgnoreCase(str, str1, str2, str3);

 

contains

//是否包含指定字符串
boolean b1 = StringUtils.contains(str, "h");
boolean b2 = StringUtils.containsIgnoreCase(str, "H");

//是否包含指定字符中的某个字符,只要包含其中一个即可。指定字符可以写成String或char...
boolean b3 = StringUtils.containsAny(str, "Hh");
boolean b4 = StringUtils.containsAny(str, 'H', 'h');

//是否包含指定字符串中的某个字符串
boolean b5 = StringUtils.containsAny(str, "He", "he");

//是否不包含指定字符中的任意一个字符
boolean b6 = StringUtils.containsNone(str, "Hh");
boolean b7 = StringUtils.containsNone(str, 'H', 'h');

//是否只包含指定字符
boolean b8 = StringUtils.containsOnly(str, "Hh");
boolean b9 = StringUtils.containsOnly(str, 'H', 'h');

//是否包含空白符。如果str是empty的,直接返回false
boolean b10 = StringUtils.containsWhitespace(str);

如果远传其中一个参数为null,直接返回false

 

replace、remove

//替换指定字符串,会替换所有出现处
String str1 = StringUtils.replace(str, "he", "He");
//匹配时忽略大小写
String str2 = StringUtils.replaceIgnoreCase(str, "he", "He");

//可以指定替换次数,未指定时默认-1 全部提换(不限制提换次数)
String str3 = StringUtils.replace(str, "he", "He", 3);
String str4 = StringUtils.replaceIgnoreCase(str, "he", "He", 3);

//只提换1次
String str5 = StringUtils.replaceOnce(str, "he", "He");
String str6 = StringUtils.replaceOnceIgnoreCase(str, "he", "He");

//替换多个字符串,2个数组对应位置上的元素一一对应
//同时在原串上进行替换 dcte
String str7 = StringUtils.replaceEach("abcde", new String[]{"ab", "d"}, new String[]{"d", "t"});
//数组元素依次进行替换,后续元素在之前元素替换后的结果上进行操作 tcte
String str8 = StringUtils.replaceEachRepeatedly("abcde", new String[]{"ab", "d"}, new String[]{"d", "t"});



//移除所有匹配的子串
String str1 = StringUtils.remove(str, "el");
//移除开头处的指定字符串
String str2 = StringUtils.removeStart(str, "he");
//移除末尾处的指定字符串
String str3 = StringUtils.removeEnd(str, "lo");

//匹配时不区分大小写
String str4 = StringUtils.removeIgnoreCase(str, "el");
String str5 = StringUtils.removeStartIgnoreCase(str, "he");
String str6 = StringUtils.removeEndIgnoreCase(str, "lo");

都是在副本上修改,返回副本,原串不变。

 

indexOf

//查找指定字符、字符串第一次出现的位置,找不到则返回-1
int index1 = str.indexOf("xxx");
//查找指定字符、字符串最后一次出现的位置,找不到则返回-1
int index2 = str.lastIndexOf("l");

//都可以指定查找开始位置
int index3 = str.indexOf("xxx", 5);
int index4 = str.lastIndexOf("l", 5);

 

default

//如果str不为null,返回str;如果str为null返回指定的默认字符串
String str1=StringUtils.defaultString(str,"默认字符串");
//默认字符串为空串
String str2=StringUtils.defaultString(str);

//如果str是blank|empty,返回默认字符串
String str3 = StringUtils.defaultIfBlank(str, "默认字符串");
String str4 = StringUtils.defaultIfEmpty(str, "默认字符串");

 

wrap、prepend、append、pad 两端字符填充

//在两端直接加上指定字符串
String str1 = StringUtils.wrap(str, "xxx");
//在两端加上指定字符串。缺失的一端才加上,如果这端已经有了,则不再添加
String str3 = StringUtils.wrapIfMissing(str, "xxx");
//去除两端的指定子串。要两端同时是指定子串才去除,否则不去除
String str2 = StringUtils.unwrap(str, "xxx");


//如果str开头缺失子串str2,在str开头添加子串str1
StringUtils.prependIfMissing(str, str1, str2);
//如果str末尾缺失子串str2,则在str末尾添加子串str1
StringUtils.appendIfMissing(str, str1, str2);

//匹配时忽略大小写
StringUtils.prependIfMissingIgnoreCase(str, str1, str2);
StringUtils.appendIfMissingIgnoreCase(str, str1, str2);


//两端自动填充,字符串长度不够时自动在两端填充指定字符,第二个参数指定目标字符数,第三个参数指定填充字符,缺省时默认为空格
str7 = StringUtils.leftPad(str, 10, "0");
str8 = StringUtils.rightPad(str, 10, "0");

 

trim、strip 移除两端特殊字符

//trim系列:移除字符串两端的空格,以及\n、\t之类的特殊字符
//strip系列:使用方式和trim系列相同,但strip只移除字符串两端的空格

//如果参数是null,返回null;如果处理后是空串,返回空串
String str1 = StringUtils.trim("xxx");
//如果参数是null或者处理后是空串,均返回null
String str3 = StringUtils.trimToNull("xxx");
//如果参数是null或者处理后是空串,均返回空串
String str2 = StringUtils.trimToEmpty("xxx");

String str4 = StringUtils.strip("xxx");
String str5 = StringUtils.stripToNull("xxx");
String str6 = StringUtils.stripToEmpty("xxx");

 

startsWith、endsWith

//是否以指定字符串开头
boolean b1 = StringUtils.startsWith(str, "he");
boolean b2 = StringUtils.startsWithIgnoreCase(str, "He");
//是否以指定字符串中的某一个开头
boolean b3 = StringUtils.startsWithAny(str, "he", "HE", "He");

//endsWith 系列使用方式相同

 

countMatches 字符统计、reverse字符串反转、upperCase、lowerCase

//统计字符|字符串出现的次数
int count1 = StringUtils.countMatches(str, 'l');
int count2 = StringUtils.countMatches(str, "he");


//字符串反转
String reverse = StringUtils.reverse(str);


//转换为全大|小写
String str1 = StringUtils.upperCase(str);
String str2 = StringUtils.lowerCase(str);

 

spring的StringUtils

判断、统计

//StringUtils.isEmpty()已过时,可以用以下3个方法代替

//字符串长度是否 >0,null、空串 => false
boolean b1 = StringUtils.hasLength("xxx");

//null、空串、空格串返回false
boolean b2 = StringUtils.hasText("xxx");

//判断 Object 或 Object[] 是否为空,null、空串、空数组 => true
boolean b3 = ObjectUtils.isEmpty("xxx");


//是否以指定字符串开头|结尾,匹配时忽略大小写
boolean b1 = StringUtils.startsWithIgnoreCase("hello", "H");
boolean b2 = StringUtils.endsWithIgnoreCase("hello", "o");


//统计子串出现次数
int count = StringUtils.countOccurrencesOf("hello", "l");

 

删除、替换

//删除匹配到的所有子串
String str2 = StringUtils.delete("hello", "l");

//删除匹配到的所有单个字符。会把第二个参数作为char数组,删除所有匹配到的char
String str3 = StringUtils.deleteAny("hello", "hl");


//替换子串,会替换所有匹配的子串
String str4 = StringUtils.replace("hello", "h", "H");


//去除两端的空格
String str = StringUtils.trimWhitespace(" hello ");

 

盘符、路径

//分号
System.out.println(File.pathSeparator);

//linux路径是/,win路径是\\
System.out.println("/usr/local/".endsWith(File.separator));


//判斷2个盘符是否等价,会自动转换\\、/,但不会去掉、补上首尾的斜杠
boolean b = StringUtils.pathEquals("/usr/local/", "\\usr\\local\\");

//拼接2个路径,会自动处理拼接处多余的/,要求: /、\\不能混用,拼接处的/可以多,但不能少
String str1 = StringUtils.applyRelativePath("/sur/","/local/upload");

//将path中的\\转换为/
String str2 = StringUtils.cleanPath("/usr/local\\upload");


//获取文件名(带后缀)
String filename = StringUtils.getFilename("/usr/local/upload/xxx.png");

//获取扩展名(不带.)
String filenameExtension = StringUtils.getFilenameExtension("/usr/local/upload/xxx.png");

 

String数组、集合

//移除string数组中的重复元素
String[] arr2 = StringUtils.removeDuplicateStrings(arr1);

//字符串数组排序,默认逐个字符按ASCII码值比较,升序
String[] arr1 = StringUtils.sortStringArray(arr);

//连接2个String数组
String[] arr3 = StringUtils.concatenateStringArrays(arr1, arr2);


//Object[]拼接为String,默认使用逗号作为连接符,可指定连接符
//注意是Object[],不局限于String[]
String str1 = StringUtils.arrayToCommaDelimitedString(arr);
String str2 = StringUtils.arrayToDelimitedString(arr, "_");

//Collection<Object> 拼接为String
String str3 = StringUtils.collectionToCommaDelimitedString(collection);
String str4 = StringUtils.collectionToDelimitedString(collection, "_");


//collection<String>转String[]
String[] arr2 = StringUtils.toStringArray(collection);

 

ChineseHelper 繁简字转换

 <dependency>
     <groupId>com.github.stuxuhai</groupId>
     <artifactId>jpinyin</artifactId>
     <version>1.1.8</version>
 </dependency>
//简体 => 繁体
String fanStr = ChineseHelper.convertToTraditionalChinese(jianStr);

//繁体 => 简体
String jianStr = ChineseHelper.convertToSimplifiedChinese(fanStr);
 类似资料: