我有一个需要替换子字符串的要求。
输入字符串为:
true-[Test5]procedure4.spec@john:380733712-1
预期的输出字符串为:
true-[Test5]procedure4.spec@X:380733712-1
在这里,约翰一词必须用字符X代替。为此,我实现了如下的Java代码。
import java.util.Arrays;
import java.util.List;
public class Regex {
public static void main(String[] args) {
List<String> variableList = Arrays.asList("true-[Test5]procedure4.spec@mohan:180713133712267-1");
for (String item : variableList) {
if (item.contains("@") && item.contains(":") && item.split("@").length >= 1
&& item.split(":").length >= 1) {
StringBuilder firstString = new StringBuilder(item.split("@")[0] != null ? item.split("@")[0] : "");
StringBuilder secondString = new StringBuilder(item.split(":")[1] != null ? item.split(":")[1] : "");;
System.out.println(firstString + "@X:" + secondString);
}
}
}
}
我是正则表达式的新手。我想在Java中使用Pattern和Matcher用正则表达式替换上面的代码。
答案 0 :(得分:2)
使用
List<String> variableList = Arrays.asList("true-[Test5]procedure4.spec@mohan:180713133712267-1", "true-[Test5]procedure4.spec@Step2-1");
for (String item : variableList) {
System.out.println(item + " => " + item.replaceFirst("@[^:]+:", "@X:"));
}
请参见Java demo。输出:
true-[Test5]procedure4.spec@mohan:180713133712267-1 => true-[Test5]procedure4.spec@X:180713133712267-1
true-[Test5]procedure4.spec@Step2-1 => true-[Test5]procedure4.spec@Step2-1
详细信息
@
-一个@
字符[^:]+
-匹配:
之外的1个或更多字符的negated character class。您还可以使用捕获组/反向引用来避免重复@
:
.replaceFirst("(@)[^:]+:", "$1X:")
如果您必须匹配多个@
,例如([@#])
,匹配@
或#
。