java - 使用正则表达式替换所有奇数出现的子字符串

标签 java regex string

我有一个字符串~~40~~摄氏度温度:33摄氏度温度:~~50~~

我想用另一个字符串“**”替换奇数出现的子字符串“~~”,即第一个、第三个..。

我的输出应该是**40~~ 摄氏度 Temp: 33 摄氏度 Temp:**50~~

如何使用 Java 中的正则表达式实现此目的?

最佳答案

你确实需要一个基本的解析器来处理这个问题;正则表达式并不是为了计算这样的出现次数而设计的。下面代码的逻辑很简单。每次我们命中匹配 ~~ 时,我们都会执行以下两件事之一。如果出现奇怪的情况,则我们将空字符串附加到替换中,否则我们重新附加我们匹配的 ~~

String input = "~~40~~ Celsius Temp: 33 Celsius Temp:~~50~~";
Pattern p = Pattern.compile("~~");
Matcher m = p.matcher(input);
StringBuffer sb = new StringBuffer(input.length());
int i = 0;

while (m.find()) {
    if (i % 2 == 0) {
        m.appendReplacement(sb, "**");
    }
    else {
        m.appendReplacement(sb, m.group(0));
    }
    ++i;
}
m.appendTail(sb);
System.out.println(sb.toString());

**40~~ Celsius Temp: 33 Celsius Temp:**50~~

Demo

关于java - 使用正则表达式替换所有奇数出现的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50597204/

相关文章:

JavaScript 正则表达式 匹配之前的任何内容

regex - 如何用sed搜索和替换这个字符串?

java - 分割Java字符串

Java+Eclipse : how do you debug a java program that is receiving piped/redirected stdin?

java - 创建没有按钮的对话框

python - 匹配所有以s结尾的单词

c# - 试图在字符串中查找单词但获取枚举没有结果

java - Spring 4 websockets 导致大量异常

java - 如何获取在selenium中返回 boolean 值的属性值

PHP:计算字符串中的数学函数 f(x)