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 elit\n"
+ "\n"
+ "sed do eiusmod tempor incididunt ut\n"
+ "labore et dolore magna aliqua\n";
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 sat amet,\Nconsectetur adipiscing elit sed do eiusmod tempor inciditunt ut\Nlabore et dolore magna aliqua
Lorem ipsum dolor sat amet,Nconsectetur adipiscing elit sed do eiusmod tempor inciditunt utNlabore et dolore magna aliqua
最佳答案
Note that backslashes () and dollar signs ($) in the replacement string may cause the results to be different than if it were being treated as a literal replacement string. Dollar signs may be treated as references to captured subsequences as described above, and backslashes are used to escape literal characters in the replacement string.
您正在 xyz
String 对象中插入 \N
。追加函数将用替换字符替换反斜杠字符,就像将其放入字符串文字中一样。因此,要通过append函数得到\N
,需要转义两次:\\\\N
关于java - REGEX 匹配器不替换反斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34708630/