只是想知道对于给定的String这样是否有更好的解决方案,例如
xDLMContent <matches> something <and> dSecurityGroup <contains> somethingelse <and> xDLMSomeOtherMetaDataField <matches> anothersomethingelse
Run Code Online (Sandbox Code Playgroud)
它需要替换为
DLMContent <matches> something <and> SecurityGroup <contains> somethingelse <and> DLMSomeOtherMetaDataField <matches> anothersomethingelse
Run Code Online (Sandbox Code Playgroud)
规则为元数据字段以x或d开头,后跟大写字母,然后是1个或多个大小写混合的alpha字符。
这是我的解决方案,但我想知道是否还有更好的选择
public static void main(String[] args) {
String s = "xDLMContent <matches> something <and> dSecurityGroup <contains> somethingelse <and> xDLMSomeOtherMetaDataField <matches> anothersomethingelse";
Pattern pattern = Pattern.compile("[dx][A-Z][a-zA-Z]+");
Matcher matcher = pattern.match(s);
while (matcher.find()) {
String orig = s.substring(matcher.start(), matcher.end());
String rep = s.substring(matcher.start() + 1, matcher.end());
s = s.replaceAll(orig, rep);
matcher = pattern.match(s);
}
System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)
使用replaceAll()效果很好。只需选择要保留的内容(括号中的部分()),然后使用$1
String f = s.replaceAll("[dx]([A-Z][a-zA-Z]+)", "$1");
Run Code Online (Sandbox Code Playgroud)
输出量
DLMContent <matches> something <and> SecurityGroup <contains> somethingelse <and> DLMSomeOtherMetaDataField <matches> anothersomethingelse
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3007 次 |
| 最近记录: |