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

标签 java functional-interface

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

相关文章:

java - 只用一个类或多个类实现接口(interface)

scala - Scala缓存是否转换为功能接口(interface)

java - Java 8 中使用的功能接口(interface)是什么?

java - 有没有办法打印功能界面?

java - JUnit:NoClassDefFoundError:org/junit/runner/manipulation/Filter

java - 从 servlet 访问 WebContent 中的文件

java - 当我运行 jframe 时,它​​总是显示 "java.lang.NumberFormatException: empty String"

java - 概念 : temporal numeric dataset with summing/aggregation operations? 的名称是什么

java - 对 Lambda 对象的方法调用返回值

lambda - java 8 - 声明要在 map 中使用的方法,稍后将值传递给该方法