java 只替换String字符串中第一次出现的某个子串

目录

问题现象:

问题分析:

解决方法:


问题现象:

        今天在项目中遇到一个问题:

        如何替换一个String字符串中第一次出现的某个子串。


问题分析:

        从问题可知,这个String字符串中应该含有多个该子串,然后这些子串是错落分布在这个String父串中的。

        因此如果只是想要替换第一次出现的该子串的话,其实只需要调用String的replaceFirst()方法即可;

1.s.replaceFirst("正则表达式[被替换的子串]",替换后的子串);

        但是呢,有一点需要注意的,就是这个方法的第一个参数是正则表达式,所以调用该方法的小伙伴记得先复习一下正则表达式的内容。这里提几点:

字符作用
.匹配除换行符以外的任意字符

^

匹配字符串的开始
$匹配字符串的结束
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
\匹配下一个字符

当然了,用到正则表达式总感觉挺麻烦的,其实这里也可以用 \ 转义字符来转义从而消除正则表达式的限制。

除了替换第一次出现的子串之外,还有一些其他的替换方法:

2.s.replace("被替换的子串",替换后的子串);

//s.replace()用于替换父串中所有被匹配的子串,这个方法不需要正则表达式,是很常用的字符串替换方法。

3.s.replaceAll("正则表达式[被替换的子串]",替换后的子串);

//s.replaceAll()这个方法和s.replace()的作用是一样的,区别在于:首参数是正则表达式。

        话不多说马上实验最重要,实验示例如下,代码在文末: 


解决方法:

public static void main(String[] args) {
		String s = "#y*#test*#txt";
		System.out.println("s   :" + s);//#y*#test*#txt

		// 解释这里的"\\*#":
		// 第一个\ :触发正则表达式的功能,将下一个字符识别为普通字符串,而忽略其正则含义
		//           所以第二个 \ 就别识别为字符串
		// 第二个\ :由于被识别为字符串,这就触发了java字符串中的转义符号功能,将下一个字符识别为普通字符
		String s1 = s.replaceFirst("\\*#", "_");
		System.out.println("s1  :" + s1);//#y_test*#txt
		String s1_2 = s.replaceFirst(".#", "_");
		System.out.println("s1_2:" + s1_2);//#y_test*#txt

		String s2 = s.replace("\\*#", "_");
		System.out.println("s2  :" + s2);//#y*#test*#txt
		String s2_2 = s.replace(".#", "_");
		System.out.println("s2_2:" + s2_2);//#y*#test*#txt
		String s2_3 = s.replace("*#", "_");
		System.out.println("s2_3:" + s2_3);//#y_test_txt
		String s2_4 = s.replace("#", "_");
		System.out.println("s2_4:" + s2_4);//_y*_test*_txt

		String s3 = s.replaceAll("\\*#", "_");
		System.out.println("s3  :" + s3);//#y_test_txt
		String s3_2 = s.replaceAll(".#", "_");
		System.out.println("s3_2:" + s3_2);//#y_test_txt
	}

打印结果:

s   :#y*#test*#txt
s1  :#y_test*#txt
s1_2:#y_test*#txt
s2  :#y*#test*#txt
s2_2:#y*#test*#txt
s2_3:#y_test_txt
s2_4:_y*_test*_txt
s3  :#y_test_txt
s3_2:#y_test_txt

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值