>Java拼接字符串(包括空字符串)的多种方法
一:问题展示
我们举例使用 “+” 的方式拼接:
String[] values = {"I ", "want to ", "splicing ", "some ", "charactors ", null};
String result = "";
for (String value : values) {
result = result + value;
}
结果如下:
I want to splicing some charactors null
但是,我们发现了一个问题,最后的 null 值作为字符串
也拼接了下来,这显然不是我们想要的。
同样,即使我们在 Java 8 或更高版本上运行,然后使用String.join() 静态方法拼接字符串,一样会得到带有 null 值的输出:
String[] values = {"I ", "want to ", "splicing ", "some ", "charactors ", null};
String result = String.join("", values);
// 结果
I want to splicing some charactors null
二:拼接方法
为了方便后续的代码演示,我们抽取一个可以传入字符串,返回一个非 null 字符串的方法。
public String nullToString(String value) {
if (value != null)
return value;
}
1.使用 “+” 运算符
加法符号 “+” 可以拼接 String 字符串,那么我们只需要在拼接时进行 null 判断就可以把 null 值替换为空字符串了。
for (String value : values) {
result = result + nullToString(value);
}
但是,我们知道 String 是一个不可变对象,使用 + 号会频繁的创建字符串对象,每次都会在内存中创建一个新的字符串,所以使用 + 符号来拼接字符串的性能消耗是很高的。
2.使用String.concat()
String.concat() 是 String 类自带的一个方法,使用这种方式拼接字符串十分方便。
for (String value : values) {
result = result.concat(nullToString(value));
}
3.使用StringBuilder
StringBuilder 类是在学习过程中新学习的一个比较实用的 String 处理类。
StringBuilder 类提供了很多有用且方便的 String 构建方法。其中比较常用的是 append() 方法,使用 append() 来拼接字符串,同时结合 nullToString() 方法来避免 null 值。
String[] values = {"I ", "want to ", "splicing ", "some ", "charactors ", null};
StringBuilder result = new StringBuilder();
for (String value : values) {
result = result.append(nullToString(value));
}
// 结果
I want to splicing some charactors
4.使用StringJoiner
StringJoiner 类是 Java 8以后加入的一种新的方法。
StringJoiner 类提供了更强大的字符串拼接功能,不仅可以指定拼接时的分隔符,还可以指定拼接时的前缀和后缀,这里我们可以使用它的 add()方法来拼接字符串。
同样的会用 nullToString() 方法来避免 null 值。
String[] values = {"I ", "want to ", "splicing ", "some ", "charactors ", null};
StringJoiner result = new StringJoiner("");
for (String value : values) {
result = result.add(nullToString(value));
}
// 结果
I want to splicing some charactors
5.使用Streams.filter()
Stream API 是 Java 8 引入的功能强大的流式操作类,可以进行常见的过滤、映射、遍历、分组、统计等操作。其中的过滤操作 filter 可以接收一个 Predicate 函数,Predicate 函数接口同 Function (opens new window)接口一样,是一个函数式接口,它可以接受一个泛型 参数,返回值为布尔类型,Predicate 常用于数据过滤。
因此,我们可以定义一个Predicate 来检查为 null 的字符串,然后传递给 Stream API 的 filter() 方法。
最后再使用 Collectors.joining() 方法拼接剩余的非 null 字符串。
String[] values = {"I ", "want to ", "splicing ", "some ", "charactors ", null};
String result = Arrays.stream(values).filter(Objects::nonNull).collect(Collectors.joining());
————————————————
版权声明:本一级标题内容为优快云博主「m0_68988603」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/m0_68988603/article/details/124458360
>java判断字符串中是否包含某个字符
1.使用String类的contains()方法
contains()方法用于判断字符串中是否包含指定的字符或字符串。语法如下:
public boolean contains(CharSequence chars)
参数类型:CharSequence
CharSequence是一个接口,实现这个接口的类有:CharBuffer、String、StringBuffer和StringBuilder。可以理解为“CharSequence描述的就是字符串”。所以,用contains方法判断字符串中是否包含某个字符时,不能使用字符类型的变量,应该将字符转化为字符串再使用contains()方法判断。
从图片中我们可以看出String类的contains()方法中的参数类型不能为char。将字符转化为字符串的方法一般有两种:
1.使用加号连接空字符串**+ “”**
char ch = 'a';
String s = "abandon";
System.out.println(s.contains(ch + ""));
2.使用**String.valueOf()**方法
char ch = 'a';
String s = "abandon";
System.out.println(s.contains(String.valueOf(ch)));
2.使用String类的indexOf方法
indexOf()方法不仅能判断字符串中是否能包含某个字符,还可以返回对应的下标,而且能找出所有相同字符对应的下标。
输出结果为:
>String转换成BigDecimal
BigDecimal bd = new BigDecimal(str);
>String类型转Double类型实例:
Facility facility = new Facility();
BeanUtils.copyProperties(vo, facility);
if(StringUtils.isNotBlank(vo.getLongitude())){
facility.setLongitude(Double.valueOf(vo.getLongitude()));
}
if(StringUtils.isNotBlank(vo.getLatitude())){
facility.setLatitude(Double.valueOf(vo.getLatitude()));
}
>Java String类Api文档
https://blog.youkuaiyun.com/weixin_44141495/article/details/108100751
>>替换String中的某些字符(replace)
用:
返回值类型 | 方法名 | 描述 |
---|---|---|
String | replace(char oldchar,char newchar) | 将oldchar替换成新的newchar |
replace方法,自己会判断,如果含有则替换,不含有则不会有操作,并且可以多次调用
// 对approvalShort进行处理,去掉'sp','sc'等
String approvalShortRep = approvalShort.replace("sp", "").replace("sc", "");
StringBuilder shortBuilder = new StringBuilder();
String shortStr = shortBuilder.append(approvalShortRep).append("%").toString();
>>这里在String和字符串的比较上出过错:具体如下:
错误实例
/* if (projectStorage.getStorageCode() == projectStoragehouse.getStorageCode()) {
storageHouseTreeVO.setStorehouseCode(projectStoragehouse.getStorehouseCode());
storageHouseTreeVO.setStorehouseName(projectStoragehouse.getStorehouseName());
storageHouseTreeVOS.add(storageHouseTreeVO);
}
*/
注意:
String类型和String类型不能直接用 == 比较,String有自己的具体的比较数值相等的方法。
如果直接用 == 比较,则是哈希地址的比较,永远也不成立!!!
String的API方法,详见上边的链接或者自己找
>>字符串比较(equalsIgnoreCase)的时候出错(前端传来的参数有空格,导致无法匹配)
鉴于此等情况,我们要对String字符串的特殊字符做一下处理,去掉多余的特殊字符,如下:
>>>Java中去除字符串中空格的方法
在字符串
匹配功能上总是出现多余不正确的匹配,debug调试之后,发现一个坑。
------->代码中字符串使用了replaceAll()方法,去除了所有空格(其中包括:首尾空格、中间空格)
遂整理下java关于字符串去除空格的方法。
1、方法分类
str.trim(); //去掉首尾空格
str.replace(" ",""); //去除所有空格,包括首尾、中间
str.replaceAll(" ", ""); //去掉所有空格,包括首尾、中间
str.replaceAll(" +",""); //去掉所有空格,包括首尾、中间
str.replaceAll("\\s*", ""); //可以替换大部分空白字符, 不限于空格 ;
\\s* 可以匹配空格、制表符、换页符等空白字符的其中任意一个。
2、代码示例
package test;
public class Test {
/**
* description:字符串去除空格的方法
*/
public static void main(String[] args) {
String str = " hi world ~ ";
//方法1:str.trim()
System.out.println("1--->"+str.trim());
//方法2:str.repalce(" ","")
System.out.println("2--->"+str.replace(" ", ""));
//方法3:str.repalceAll(" ","")
System.out.println("3--->"+str.replaceAll(" ", ""));
//方法4:str.repalceAll(" +","")
System.out.println("4--->"+str.replaceAll(" +", ""));
//方法5:str.repalceAll("\\s*","")
System.out.println("4--->"+str.replaceAll("\\s*", ""));
}
}
3、输出结果
4、replace和replaceAll是JAVA中常用的替换字符的方法,它们的区别是:
(1) replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);
(2) replaceAll的参数是regex,即基于规则表达式的替换,比如,可以通过replaceAll(“\d”, “*”)把一个字符串所有的数字字符都换成星号;
相同点:都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,如果只想替换第一次出现的,可以使用 。
replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的时,只替换第一次出现的字符串;
————————————————
版权声明:本文为优快云博主「张某某啊哈」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_36908872/article/details/115282239
>验证String字段非空的几种写法
if (StringUtils.isBlank(contactValue1)) {
excelValue.add(contactValue1);
}
if (!contactValue1.isEmpty()) {
excelValue.add(contactValue1);
}
list.isEmpty() ;//false,判断集合是否为空
在校验一个String类型的变量是否为空时,通常存在3中情况
是否为 null
是否为 “”
是否为空字符串(引号中间有空格) 如: " "。
制表符、换行符、换页符和回车
StringUtils的isBlank()方法可以一次性校验这三种情况,返回值都是true,否则为false
StringUtils.isBlank(image);
如果image为空,返回值为true
如果返回值不为空,返回值为false
//想要判断是不是空 一般下面两个就可以了
if(null == image || StringUtils.isBlank(image.getImage())){
map.put(“code”,“0”);
map.put(“msg”,“数据为空”);
return map;
}