当前位置 : 主页 > 编程语言 > java >

Java 实现repalceAll只替换第二个匹配到的字符串

来源:互联网 收集:自由互联 发布时间:2021-04-03
String replace replaceFirst repaceAll区别 replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 replaceAll(String regex, String replacement) 使用

String replace replaceFirst repaceAll区别

replace(char oldChar, char newChar)

返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。

replaceAll(String regex, String replacement)

使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串

replaceFirst(String regex, String replacement)

使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

总结:

replace 替换的是char,replaceAll、replaceFirst替换的可以是字符串,也可以是正则表达式;三者返回的都是一个新的字符串。

例题

需求:将字符串 time:[* TO *] 中第二个*替换为 test

实现代码

@Test 
public void replaceSecondStr() { 
 String test = "time:[* TO *]"; 
 String result1 = test.replaceAll("(\\*)(.*?)(\\1)(.*?)", "$1$2test$4"); 
 System.out.println("原字符串:" + test);
 System.out.println("替换后:" + result1);
}

输出:

原字符串:time:[* TO *]

替换后:time:[* TO test]

总结:

正则中()表示提取匹配的字符串并分组;会分配存储空间,可以用$1取得匹配到的字符串;

\\1表示与第一个()中匹配的内容相同,也可以继续写(\\*);

(.*?)为勉强匹配方式,意思是匹配任何字符。

补充(取出匹配到的字符串)

@Test
public void findGroup() {
 String test = "time:[* TO *]";
 Matcher matcher = Pattern.compile("(\\*)(.*?)(\\1)(.*?)").matcher(test);
 if (matcher.find()) {
  System.out.println(matcher.group());
 }
}

补充知识:java字符串的操作:去除字符、替换字符、多个字符分隔字符串

看代码吧~

// 去除空格,换行,制表符
public String replaceBlank(String str) {
String dest = "";
if (str!=null) {
Pattern p = Pattern.compile("\\s*|\t|\r|\n"); // 去除多个空格,去除制表符,回车,换行
Matcher m = p.matcher(str);
dest = m.replaceAll("");
}
return dest;
}
String s = "你要去除的字符串";

1.去除空格:s = s.replace('\\s','');

2.去除回车:s = s.replace('\n','');

字符串去除多个字符串(括号):

String cal = tableStrings.get(i).replaceAll("\\(|\\)", ""); // 去除左右括号

字符串分隔多个字符:

String[] temp = cal.split("\\+|\\-|\\*|\\/"); // 按照加减乘除字符分隔字符串

以上这篇Java 实现repalceAll只替换第二个匹配到的字符串就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易盾网络。

网友评论