7

我想知道为什么我没有得到预期的结果:

String t = "1302248663033   <script language='javascript'>nvieor\ngnroeignrieogi</script>";
t.replaceAll("\n", "");
System.out.println(t);

输出是:

1302248663033   <script language='javascript'>nvieor
gnroeignrieogi</script>

所以我想知道为什么\n仍然存在。有人知道吗?\n 在某种程度上是特殊的吗?

编辑:

所以我在将换行符与 . 在正则表达式中,没有意识到使用 DOTALL 选项的用途,因此我将在此处添加需要做的事情以供将来参考:

String text = null;
text = FileUtils.readFileToString(inFile);
Pattern p = Pattern.compile("<script language='javascript'>.+?</script>\n", Pattern.DOTALL);
text = p.matcher(text).replaceAll("");
out.write(text);
4

3 回答 3

20

字符串是不可变的。像这样的字符串操作replaceAll不会修改您调用它的实例,它们会返回新的 String 实例。解决方案是将修改后的字符串分配给您的原始变量。

t = t.replaceAll("\n", "");
于 2011-04-14T03:16:56.747 回答
1

是的,\n很特别。它是一个转义序列,代表换行符。您需要在字符串文字中对其进行转义,以便以您想要的方式实际解释它。在序列之前附加一个 \ ,使其看起来像这样:

"\\n"

现在你的程序应该是这样的:

String t = "1302248663033   <script language='javascript'>nvieor\\ngnroeignrieogi</script>";
t = t.replaceAll("\\n", "");
System.out.println(t);

当然,如果字符串t来自某个地方而不是您实际输入到程序中,那么您只需在调用中添加额外的斜杠replaceAll()

根据评论编辑。

于 2011-04-14T03:20:10.930 回答
0
public static String escape(String s) {
    return s
            .replaceAll("\n", "")
            .replaceAll("\r", "");
}
于 2021-08-24T03:23:55.710 回答