3

我正在使用 javareplaceAll()方法来转义换行符

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");
4

6 回答 6

4

您必须一个接一个地进行,因为换行符 U+000A 与两个字符的转义序列无关\n

comment = comment.replaceAll("\n","\\\\n");
comment = comment.replaceAll("\r","\\\\r");
comment = comment.replaceAll("\t","\\\\t");
于 2013-08-12T09:36:32.197 回答
1

困难的方式:使用 Matcher

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
于 2013-08-12T09:54:36.107 回答
1

你必须逐个字符地做:

comment = comment.replaceAll("\n","\\\\n");
comment = comment.replaceAll("\r","\\\\r");
comment = comment.replaceAll("\t","\\\\t");

另一种解决方案是使用此函数将字符串转义为 Java 字符串:

comment = org.apache.commons.lang.StringEscapeUtils.escapeJava(comment);

这将使 String 看起来与 Java 代码中的 String 完全一样,但它也会显示其他转义序列(如\\\")。但也许这正是你想要的

于 2013-08-12T09:35:11.360 回答
1

为什么你不使用Matcher.quoteReplacement(stringToBeReplaced);

于 2015-07-31T12:30:53.567 回答
0

这是一个\问题,像这样简化:

comment = comment.replaceAll("(\n|\r|\t)", "");

输出 :

ddnfa    dnfadsf '  t  
于 2013-08-12T09:43:46.097 回答
0

尝试这个..

comment.replaceAll("(\n)|(\r)|(\t)", "\n");
于 2013-08-12T09:38:24.273 回答