Java replaceAll()方法来转义特殊字符

时间:2013-08-12 09:32:31

标签: java regex replaceall

我使用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");

6 个答案:

答案 0 :(得分:4)

你必须逐个进行,因为新行字符U + 000A与双字符转义序列\n无关:

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

答案 1 :(得分:1)

你必须逐字逐句地做到这一点:

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

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

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

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

答案 2 :(得分: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

答案 3 :(得分:1)

为什么你不使用$config['sess_driver'] = 'database'; // select database driver $config['sess_save_path'] = 'ci_sessions'; // name of the mysql table

答案 4 :(得分:0)

试试这个..

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

答案 5 :(得分:0)

这是\问题,简化如下:

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

输出:

ddnfa    dnfadsf '  t