Java 为什么删除断线后重新插入断线不起作用?
我正在编写一段代码,该代码应该从文本块中删除实际的换行符,并将其替换为字符串“\n”。然后,当在另一时间读取字符串时,它应该替换换行符(换句话说,搜索所有“\n”并插入Java 为什么删除断线后重新插入断线不起作用?,java,regex,string,replace,Java,Regex,String,Replace,我正在编写一段代码,该代码应该从文本块中删除实际的换行符,并将其替换为字符串“\n”。然后,当在另一时间读取字符串时,它应该替换换行符(换句话说,搜索所有“\n”并插入\n。然而,虽然第一次转换工作正常,但它不执行后者。第二次替换似乎什么也不做。为什么 替换: theString.replaceAll(Constants.LINE_BREAK, Constants.LINE_BREAK_DB_REPLACEMENT); 重新替换: theString.replaceAll(Constants.
\n
。然而,虽然第一次转换工作正常,但它不执行后者。第二次替换似乎什么也不做。为什么
替换:
theString.replaceAll(Constants.LINE_BREAK, Constants.LINE_BREAK_DB_REPLACEMENT);
重新替换:
theString.replaceAll(Constants.LINE_BREAK_DB_REPLACEMENT, Constants.LINE_BREAK);
常数:
public static final String LINE_BREAK = "\n";
public static final String LINE_BREAK_DB_REPLACEMENT = "\\\\n";
在最后一次replaceAll()方法调用中不需要四个反斜杠。 这似乎对我很管用
String str = "abc\nefg\nhijklm";
String newStr = str.replaceAll("\n", "\\\\n");
String newnewStr = newStr.replaceAll("\\\\n", "\n");
输出为:
abcefg
hijklm
abc\nefg\nhijklm
abc
efg
hijklm
我想这正是您所期望的。在中,正则表达式字符串和替换字符串都将反斜杠视为转义字符:
表示一个,它将反斜杠转义为regex
\\
是一个替换字符串,它还转义反斜杠:replacement
// Replace newline with "\n"
theString.replaceAll("\\n", "\\\\n");
// Replace "\n" with newline
theString.replaceAll("\\\\n","\n");
您还可以使用Matcher.quoteReplacement()
方法将替换字符串视为文字:
// Replace newline with "\n"
theString.replaceAll("\\n", Matcher.quoteReplacement("\\n"));
// Replace "\n" with newline
theString.replaceAll("\\\\n",Matcher.quoteReplacement("\n"));
实际上,您正在使用\\n替换换行符,但如果使用相同的常量替换回原始换行符,则不会产生任何影响。值得注意的是,即使修复了当前问题,转换也是有损的:如果原始字符串包含反斜杠字符,后跟字母
n
,则将其置于thr虽然这两个转换会将其转换为换行符。