我想知道为什么我没有得到这个预期的结果:
String t = "1302248663033 <script language='javascript'>nvieor\ngnroeignrieogi</script>";
t.replaceAll("\n", "");
System.out.println(t);
输出结果为:
1302248663033 <script language='javascript'>nvieor
gnroeignrieogi</script>
所以我想知道为什么\n
仍在那里。有人知道吗?在某种程度上是特别的吗?
编辑:
所以我遇到了将换行符与a匹配的问题。在正则表达式中,没有意识到使用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);
答案 0 :(得分:17)
字符串是不可变的。像replaceAll
这样的字符串操作不会修改您调用它的实例,它们会返回新的String实例。解决方案是将修改后的字符串分配给原始变量。
t = t.replaceAll("\n", "");
答案 1 :(得分:0)
是的,\n
很特别。它是一个代表换行符的转义序列。
您需要在字符串文字中对其进行转义,以便按照您希望的方式对其进行实际解释。在序列之前附加\,使其看起来像这样:
"\\n"
现在你的程序应该是这样的:
String t = "1302248663033 <script language='javascript'>nvieor\\ngnroeignrieogi</script>";
t = t.replaceAll("\\n", "");
System.out.println(t);
当然,如果字符串t
来自某个地方而不是实际被您输入程序,那么您只需在调用replaceAll()
根据评论编辑。