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

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只替换第二个匹配到的字符串就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • String.replaceAll方法详析(正则妙用)

    前言 我通常是不太关心代码的具体实现的,因为我的开发语言很杂,倾向于一些最简单通用的方式去解决.今儿不小心在群里看到一位朋友发了下面的java代码,感觉自己还是很局限很无知的: String str1 = "createTime"; String str2 = "createTimeAt"; String regex = "([A-Z])+"; System.out.println(str1.replaceAll(regex, "_$1

  • JAVA中正则表达式匹配,替换,查找,切割的方法

    正则表达式的查找;主要是用到String类中的split(); String str; str.split();方法中传入按照什么规则截取,返回一个String数组 常见的截取规则: str.split("\\.")按照.来截取 str.split(" ")按照空格截取 str.split("cc+")按照c字符来截取,2个c或以上 str.split((1)\\.+)按照字符串中含有2个字符或以上的地方截取(1)表示分组为1 截取的例子; 按照

  • Java字符串替换函数replace()用法解析

    这篇文章主要介绍了Java字符串替换函数replace()用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 replace(char oldChar, char newChar)返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的 代码如下 import java.util.*; public class Main{ public static void main(String[] args)

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

    String replace replaceFirst repaceAll区别 replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的. replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串 replaceFirst(String regex, String rep

  • Java如何替换第一个和最后一个字符串

    Java替换第一个和最后一个字符串 1.测试类 package com.jeff.json; import com.alibaba.fastjson.JSONObject; public class JsonDemo1 { public static void main(String[] args) { String ret = "\"{\"success\":true,\"msg\":\"success\",\"d

  • php如何实现只替换一次或N次

    我们都知道,在PHP里Strtr,strreplace等函数都可以用来替换,不过他们每次替换的时候都是全部替换,举个例子: "abcabbc",这个字符串如果使用上边的函数来把其中的b替换掉,那么他会全部替换掉,但是如果你想只替换一个或两个怎么办呢?看下边的解决方法:      这是个比较有点意思的问题,正好之前也做过类似的处理,当时我是直接利用preg_replace实现的. mixed preg_replace ( mixed pattern, mixed replacement,

  • str_replace只替换一次字符串的方法

    我们都知道,在PHP里Strtr,strreplace等函数都可以用来替换,不过他们每次替换的时候都是全部替换,举个例子:"abcabbc",这个字符串如果使用上边的函数来把其中的b替换掉,那么他会全部替换掉,但是如果你想只替换一个或两个怎么办呢?看下边的解决方法:     这是个比较有点意思的问题,正好之前也做过类似的处理,当时我是直接利用preg_replace实现的. mixed preg_replace ( mixed pattern, mixed replacement, m

  • MapStruct处理Java中实体与模型间不匹配属性转换的方法

    摘要: 前面介绍了MapStrut简单用法,MapStrut的最重要的特点就是处理Java中实体与模型间不匹配属性的转换. 实体模型 有一个User对象: public class User { private Integer id; private String name; private double account; private boolean married; // setters, getters, toString() } 有一个Employee 对象: public class

  • Java 根据XPATH批量替换XML节点中的值

    测试环境: JDK 1.8.0_25 代码实操: message.xml文件 <Request service="SALE_ORDER_SERVICE" lang="zh-CN"> <Head> <AccessCode>xxxxxxxxxx12Ur8v6qkYAaOf</AccessCode> <Checkword>xxxxxxxxxxkmPif7Z35UEJjrR</Checkword> &l

  • python re.sub()替换正则的匹配内容方法

    如下所示: import re c = re.compile(r'\d') s = 'you1are2welcome' # 用指定的内容,替换正则匹配的内容,也可以指定替换次数 ret = c.sub(' ', s, 1) print(ret) # 处理函数接收一个参数(每次的匹配结果) def deal(s): return str(int(s.group()) * 2) # 可以认为干预替换过程,传递一个函数即可 ret = re.sub(r'\d', deal, 'you1are2welc

  • Java设计模式之里氏替换原则精解

    1.什么是里氏替换原则? 我们都知道,在面向对象编程中有三大特性(封装.继承.多态),在这里我们来说 继承 这个东西. 继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设定规范和契约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏. 也就是说:继承在给程序设计带来便利的同时,也带来了弊端.比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到

  • java如何用正则表达式匹配与提取字符串

    java.util.regex类支持用正则表达式来匹配和提取字符串,读者可以去官网查看java.util.regex的详细使用方法. 首先给出一个匹配字符串的例子(判断line是否符合格式"GraphType\\s*=\\s*\".+\"\\s*"): public static boolean isLegalInputLine(String line ) { Pattern p =Pattern.compile("GraphType\\s*=\\s*\&

  • java实现求只出现一次的数字

    目录 题目: 思路1: 思路2: 题目: 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 示例1: 示例2: 示例3: 异或运算的特点: 1.任何数和0做异或运算,结果还是原来那个数字,即a^0=a 2.任何数和本身做异或运算,结果为0,即a^a=0 3.异或运算满足交换律和结合律 思路1: 因为本题中的元素只有出现一次和两次的情况,所以我们用异或运算,来判断数字是出现一次还是两次.在singleNumber()方法中,定义

随机推荐