我想在字符串中找到与正则表达式匹配的所有模式:no ="(\ d +)"然后用其他东西替换组中的数字.
在下面的方法中,我可以找到并替换整个匹配,但这不是我想要的.有没有办法只替换那场比赛的一部分?
private String replaceStringFromPatternSearch(String stringToSearch, String patternString, String replacementString) {
String replacedString = null;
Pattern stringPattern = Pattern.compile(patternString);
Matcher stringMatcher = stringPattern.matcher(stringToSearch);
replacedString = stringMatcher.replaceAll(replacementString);
if (replacedString != null) {
return replacedString;
} else {
return stringToSearch;
}
}
Run Code Online (Sandbox Code Playgroud)
选项1:在替换功能中使用捕获缓冲区
在replaceAll,您可以从诸如捕获的文本和当时要插入的字符串等组件构建替换.这是一个例子:
String replaced = yourString.replaceAll("no=\"(\\d+)\"",
"Something $1 Something else");
Run Code Online (Sandbox Code Playgroud)
在替换中,$1是捕获的数字.您不必使用它们,但正如您所看到的,您可以围绕它们构建替换字符串.
选项2(替换Lambda/Callback/Delegate Equivalent):一次构建一个匹配
在Java中,为了构建更复杂的替换,我们没有替换lambdas,但我们可以这样做:
StringBuffer resultString = new StringBuffer();
Pattern regex = Pattern.compile("no=\"(\\d+)\"");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
// You can vary the replacement text for each match on-the-fly
// String computed_replacement = .... Something wild!
regexMatcher.appendReplacement(resultString, computed_replacement );
}
regexMatcher.appendTail(resultString);
Run Code Online (Sandbox Code Playgroud)
这两种方法都解决了我的问题:
示例数据:<detail type="07" time="100611" no="07040365089"detail">
我想用其他东西替换 07040365089 。no="\d" 在实际数据中出现多次。不同的模式还需要其他替代品。
private String replaceStringFromPatternSearch2(String stringToSearch, String patternString, String replacementString) {
String replacedString = "";
Pattern stringPattern = Pattern.compile(patternString);
int startSearch = 0;
Matcher stringMatcher = stringPattern.matcher(stringToSearch);
while (stringMatcher.find(startSearch)) {
int start = stringMatcher.start(1);
int end = stringMatcher.end(1);
replacedString += stringToSearch.substring(startSearch, start) + replacementString + stringToSearch.substring(end);
startSearch = end + 1;
}
if (!replacedString.isEmpty()) {
return replacedString;
} else {
return stringToSearch;
}
}
private String replaceStringFromPatternSearch(String stringToSearch, String patternString, String replacementString) {
String replacedString = "";
Pattern stringPattern = Pattern.compile(patternString);
int startSearch = 0;
Matcher stringMatcher = stringPattern.matcher(stringToSearch);
StringBuffer sb = new StringBuffer();
while (stringMatcher.find()) {
String wholeGroup = stringMatcher.group(0);
replacedString = wholeGroup.replace(stringMatcher.group(1), replacementString);
stringMatcher.appendReplacement(sb, replacedString);
}
stringMatcher.appendTail(sb);
if (sb.length() > 0) {
return sb.toString();
} else {
return stringToSearch;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2363 次 |
| 最近记录: |