关于【String】的一些问题

本文详细探讨了Java中处理字符串的各种方法,包括使用 '+'、String.concat()、StringBuilder、StringJoiner和Streams.filter()进行字符串拼接,通过contains()和indexOf()判断字符串是否包含特定字符,以及字符串到BigDecimal和Double的转换。同时,文章还介绍了String类API的使用,如replace和replaceAll方法,并讨论了如何有效验证String字段是否为空。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

>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)

用:

返回值类型方法名描述
Stringreplace(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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值