Skip to content

Latest commit

 

History

History
64 lines (48 loc) · 2.15 KB

正则表达式替换匹配的文本.md

File metadata and controls

64 lines (48 loc) · 2.15 KB

方法

Matcher提供了replaceAllappendReplacement方法用于替换字符串。

replaceAll用于将所有匹配到的字符替换为单一的字符串。

appendReplacement可以为每一个匹配的字符指定唯一的字符串,字符串内容不受限。

**注: ** appendReplacement替换后必须使用appendTail将剩余的字符收集完整。否则会从最后一次匹配到的字符后截断。

JAVA 实现

    /**
     * 替换字符
     * @param regex 正则表达式
     * @param input 输入
     * @param replaceStr 用于替换的字符
     */
    public static void replace(String regex, String input, String replaceStr) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);

        System.out.println("replaceAll : 用于将所有匹配的字符替换为指定的字符串");
        String replaceAll = matcher.replaceAll(replaceStr);
        System.out.println("replaceAll : " + replaceAll);

        // 重置匹配器,用于测试下面的方法
        matcher.reset();

        System.out.println("appendReplacement : 用于替换当前匹配到的字符");
        StringBuffer sb = new StringBuffer();
        int i = 0;
        while (matcher.find()) {
            // 将匹配之前的字符串复制到sb,再将匹配结果替换为: replaceChar,并追加到sb
            matcher.appendReplacement(sb, replaceStr + ++i);
        }
        System.out.println("appendReplacement : " + sb);
        // 收集剩余的字符
        matcher.appendTail(sb);
        System.out.println("appendReplacement : " + sb);

    }

    public static void main(String[] args) {
        String regex = "\\{.*?}";
        String input = "this is {} text {} text";
        String replaceStr = "a";
        replace(regex, input, replaceStr);
    }

代码输出结果:

replaceAll : 用于将所有匹配的字符替换为指定的字符串
replaceAll : this is a text a text
appendReplacement : 用于替换当前匹配到的字符
appendReplacement : this is a1 text a2
appendReplacement : this is a1 text a2 text