在Java字符串中去除空格?

4

我正在编写一份解析器用于处理一些LISP文件。我试图去除字符串中的前导空格。字符串内容类似于:

         :FUNCTION (LAMBDA
                   (DELTA
                    PLASMA-IN-0)
                 (IF
                  (OR
                   (>=
                    #61=(+
                         (*
                          1
                          DELTA)
                         PLASMA-IN-0)
                    100)
                   (<=
                    #61#
                    0))
                  PLASMA-IN-0
                  #61#))
标签都会以4个空格的形式打印在文件中,因此我想去掉这些前导制表符。 我尝试了这样做:string.replaceAll("\\s{4}", " ") - 但它对字符串没有任何影响。 有人知道我做错了什么吗?是因为它是一个多行字符串吗? 谢谢。

2
请记住在Java中字符串是不可变的,所以String.replaceAll()方法返回结果字符串而不会修改原始字符串。请确保您这样做:String result = original.replaceAll(...). - William Brendel
2个回答

8
String.trim();

应该可以工作。


1
谢谢,那个有效。虽然我还不确定另一个为什么不行。 - bcoughlan

1

你原来的正则表达式没有起作用,因为你忘记转义反斜杠了。这个应该可以实现你最初想要做的事情:

string.replaceAll("\\s{4}", " ")

编辑:我没有意识到你实际上并没有忘记转义反斜杠,正如Alan Moore在对本答案的评论中指出的那样("\s"和"\\s"之间唯一的区别是文本周围的反引号)。话虽如此,我的原始答案对你没有什么帮助,所以...

为了使其有效,您必须对String#replaceAll的输出进行处理,因为它返回一个新的字符串而不是修改现有的字符串(Strings are immutable,正如William Brendel在他对你的问题的评论中指出的那样)。

string = string.replaceAll("\\s{4}", " ")

由于这个回答没有真正添加任何价值,所以我不会删除它,而是将其变成社区维护。


1
他确实是那样写的,但他忘了用反引号括起来,所以网站的格式化软件吃掉了其中一个反斜杠。(我刚刚添加了反引号,所以现在看起来正确了。)我怀疑William Brendel做得对,只是他没有将replaceAll的结果赋回变量。 - Alan Moore
啊,我没有意识到 SO 存在问题。 - Christopher Parker
奇怪。该问题在注释中不存在。 - Christopher Parker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,