REGEX Matcher not replacing backslah



Matcher 中appendReplacement(StringBuffer sb, String replacement)的函数忽略带有双反斜杠的转义字符。我想将两行替换为一行,由 \N 分隔。这是我的代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        String str = "Lorem ipsum dolor sit amet,n"
                + "consectetur adipiscing elitn"
                + "n"
                + "sed do eiusmod tempor incididunt utn"
                + "labore et dolore magna aliquan";
        StringBuffer sb = new StringBuffer();
        Pattern p = Pattern.compile("(.+)n(.+)n");
        Matcher m = p.matcher(str);
        while(m.find()) {
            String xyz = m.group(1) + "\N" + m.group(2);
            System.out.println(xyz);
            m.appendReplacement(sb, xyz);
        }                    
        m.appendTail(sb);
        System.out.println("n" + sb);
    }
}  

输出:

Lorem ipsum dolor sit amet,\Nconsectetur adipiscing elitsed do eiusmod tempor incididunt ut\Nlabore et dolore magna aliqua

Lorem ipsum dolor sit amet,Nconsectetur adipiscing elitsed do eiusmod tempor incididunt utNlabore et dolore magna aliqua

请注意,替换字符串中的反斜杠 (( 和美元符号 ($( 可能会导致结果与将其视为文本替换字符串时的结果不同。如上所述,美元符号可以被视为对捕获的子序列的引用,反斜杠用于转义替换字符串中的文字字符。

您正在xyz字符串对象中插入N。追加函数将用替换反斜杠字符,就像将其放入字符串文本中一样。因此,要通过追加函数获取N,您需要对其进行两次转义:\\N

最新更新