The function appendReplacement(StringBuffer sb, String replacement) in Matcher is ignoring escape characters with double backslash. I want to replace two lines into one line separated by \N as it is. Here's my code:
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);
}
}
OUTPUT:
Lorem ipsum dolor sit amet,\Nconsectetur adipiscing elit sed do eiusmod tempor incididunt ut\Nlabore et dolore magna aliqua
Lorem ipsum dolor sit amet,Nconsectetur adipiscing elit sed do eiusmod tempor incididunt utNlabore et dolore magna aliqua
"\\"is one character. - VGR"\\N"is two characters. Regex patterns and replacement text have a syntax that is independent of Java String escapes. A literal backslash must appear as two U+005C REVERSE SOLIDUS characters in a regex pattern or replacement. In Java that would be"\\\\". - VGR