我正在尝试寻找下面代码中使用的功能接口(interface)的替代方案。
它可以在我的本地计算机上运行,但是当我尝试在不支持 java 9 的服务器上运行它时,它无法编译。
关于如何在不使用功能接口(interface)的情况下重新实现以下内容有什么想法吗?
public class Brackets {
Pattern parentheses = Pattern.compile(
"\\([\\p{InARABIC}\\s\\$]+\\)|\\([\\p{InBasic_Latin}\\s\\$]+\\)|\\)([\\p{InARABIC}\\s]+)\\(",
Pattern.CASE_INSENSITIVE);
@Override
public String replace(String text) {
String newText;
Matcher parenthesesMatcher = parentheses.matcher(text);
newText = parenthesesMatcher.replaceAll(match -> {
if (parenthesesMatcher.group(1) == null) {
return Matcher.quoteReplacement(parenthesesMatcher.group());
} else {
return Matcher.quoteReplacement("(" + match.group(1) + ")");
}
});
}
例如:
输入
-----------
输出
)أ(
)السلام(
هذا مجرد ) مثال ( .. طبعا
-----------
(أ)
(السلام)
هذا مجرد ( مثال ) .. طبعا
最佳答案
Matcher#replaceAll(Function<MatchResult,String> replacer)
作为较短版本添加到 Java 9
StringBuffer sb = new StrinbBuffer();
while(matcher.find()){
String replacement = /*replacement based on current match*/
matcher.appendReplacement(sb, replacement);
}
matcher.appendTail(sb);
String replacementResult = sb.toString();
因此,正如您在上面看到的,模板只需要根据当前匹配来决定应该替换什么,换句话说,将更改 currenMatch
的函数-> replacement
.
因此,您的代码的“旧方式”可能如下所示:
@Override
public String replace(String text) {
Matcher m = parentheses.matcher(text);
StringBuffer sb = new StringBuffer();
while(m.find()){
if (m.group(1) == null) {
m.appendReplacement(sb, Matcher.quoteReplacement(m.group()));
} else {
m.appendReplacement(sb, Matcher.quoteReplacement("(" + m.group(1) + ")"));
}
}
m.appendTail(sb);
return sb.toString();
}
关于java - 对于早期版本的 Java,Java 9 `Matcher#replaceAll(Function)` 中添加的替代方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55900808/