我正在使用java
replaceAll()
方法来转义换行符
String comment = "ddnfa \n \r \tdnfadsf ' \r t ";
comment = comment.replaceAll("(\\n|\\r|\\t)","\\\\$1");
System.out.println(comment);
但是上面的代码仍然是插入新行。
有没有办法输出完全相同的注释(即使用
\n
和 \r
而不是插入新行)?
更新:
我最终使用了:
comment = comment.replaceAll("\\n","\\\\n")
.replaceAll("\\r","\\\\r")
.replaceAll("\\t","\\\\t");
您必须逐一进行,因为换行符 U+000A 与两个字符转义序列无关
\n
:
comment = comment.replaceAll("\n","\\\\n");
comment = comment.replaceAll("\r","\\\\r");
comment = comment.replaceAll("\t","\\\\t");
你必须逐个字符地做:
comment = comment.replaceAll("\n","\\\\n");
comment = comment.replaceAll("\r","\\\\r");
comment = comment.replaceAll("\t","\\\\t");
另一个解决方案是使用此函数将字符串转义为 Java 字符串:
comment = org.apache.commons.lang.StringEscapeUtils.escapeJava(comment);
这将使字符串看起来与 Java 代码中的字符串完全相同,但它还会显示其他转义序列(如
\\
、\"
等)。
但也许这正是你想要的
String comment = "ddnfa \n \r \tdnfadsf ' \r t ";
Map<String,String> sub = new HashMap<String,String>();
sub.put("\n", "\\\\n");
sub.put("\r", "\\\\r");
sub.put("\t", "\\\\t");
StringBuffer result = new StringBuffer();
Pattern regex = Pattern.compile("\\n|\\r|\\t");
Matcher matcher = regex.matcher(comment);
while (matcher.find()) {
matcher.appendReplacement(result, sub.get(matcher.group()));
}
matcher.appendTail(result);
System.out.println(result.toString());
打印
ddnfa \n \r \tdnfadsf ' \r
为什么你不使用
Matcher.quoteReplacement(stringToBeReplaced);
?
这是一个
\
问题,像这样简化:
comment = comment.replaceAll("(\n|\r|\t)", "");
输出:
ddnfa dnfadsf ' t
试试这个..
comment.replaceAll("(\n)|(\r)|(\t)", "\n");
使用
String#replace
避免替换字符序列中所需的双重转义:
comment = comment.replace("\\n","\\n")
.replace("\\r","\\r")
.replace("\\t","\\t");
(
"\n"
是包含单个字符的字符串:换行符。"\\n"
是包含两个字符的字符串:反斜杠和字母 n。)