2010-03-01 216 views
4

我正在爲一些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

回答

8
String.trim(); 

應該工作。

+1

謝謝,那確實有用。仍然不確定爲什麼另一個沒有通過 – bcoughlan 2010-03-01 01:42:48

1

您的原始正則表達式不起作用,因爲您忘記了避免反斜槓。這應該做你最初嘗試做:

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