gpt4 book ai didi

java - 对于早期版本的 Java,Java 9 `Matcher#replaceAll(Function)` 中添加的替代方案是什么?

转载 作者:行者123 更新时间:2023-12-01 16:44:13 25 4
gpt4 key购买 nike

我正在尝试寻找下面代码中使用的功能接口(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com