删除Java字符串中的空格?

问题描述:

我正在为一些LISP文件编写解析器。我试图摆脱字符串中的前导空白。字符串内容如下:删除Java字符串中的空格?

  :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(...)'之类的东西。 – 2010-03-01 01:43:34

String.trim(); 

应该工作。

+1

谢谢,那确实有用。仍然不确定为什么另一个没有通过 – bcoughlan 2010-03-01 01:42:48

您的原始正则表达式不起作用,因为您忘记了避免反斜杠。这应该做你最初尝试做:

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

编辑:我不知道,你没有,其实忘了转义反斜线,而堆栈溢出“吃”之一你的反斜杠,如Alan Moore在对这个答案的评论之一中指出(“\ s”和“\\s”之间的唯一区别是反文本)。这就是说,我的原始答案是不会对你有太大的帮助,所以...

为了这个是有效的,你必须做一些String#replaceAll输出,因为它返回一个新的字符串,而不是修改现有的(Strings are immutable,因为William Brendel在他对你的问题的评论中指出)。

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

由于这个答案其实并没有增加,而不是将其删除任何有价值的东西,我让它成为社区的Wiki。

+1

他确实是这样写的,但他忽略了将这一点放在反引号中,所以该网站的格式化软件吃了一个反斜杠。 (我只是加了反引号,所以现在看起来就是这样。)我怀疑威廉布伦德尔是否正确,他只是没有将'replaceAll'的结果赋值给变量。 – 2010-06-17 23:26:51

+0

啊。我没有意识到SO有问题。 – 2010-06-18 00:30:10

+0

测试:\\ s'\\ s' \ s'\ s' – 2010-06-18 00:47:08