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 sit amet,\ Nconsectetur adipiscing elit sed do eiusmod tempor incididunt ut \ Nlabore et dolore magna aliqua
Lorem ipsum dolor坐下来,Nconsectetur adipiscing elit sed do eiusmod tempor incididunt utNlabore et dolore magna aliqua
答案 0 :(得分:0)
请注意,替换字符串中的反斜杠()和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同。如上所述,美元符号可被视为对捕获的子序列的引用,反斜杠用于替换替换字符串中的文字字符。
您正在xyz
String对象中插入\N
。 append函数将替换backslashed字符替换为将其放在String文字中。因此,要通过追加函数获取\\\\N
,您需要将其转义两次:{{1}}