java
  • newline
  • replaceall
  • 2011-04-14 45 views 4 likes 
    4

    我想知道为什么我没有得到这一个期望的结果:Java新线更换

    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是特别的吗?

    编辑:

    所以我遇到了匹配换行符与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); 
    

    回答

    17

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

    t = t.replaceAll("\n", ""); 
    
    +2

    就是这样。我知道这一点。这是一个漫长的一天... – delmet 2011-04-14 03:35:29

    +3

    要在操作系统之间移植,请使用'System.getProperty(“line.separator”)'代替换行符。 – eee 2011-04-14 04:40:46

    0

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

    "\\n" 
    

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

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

    当然如果字符串t从而地方不是真正到来正在键入通过你进入该计划,那么你只需要添加额外的斜杠在您的电话replaceAll()

    根据意见编辑。

    +0

    我错过了其他人指出的其他错误。你需要接受'replaceAll()'调用的结果并使用它,而不是原始字符串。 – chandsie 2011-04-14 03:34:30

    相关问题