2010-11-09 107 views
2

我用下面的行刪除所有$符號和空格在給定的數據「DATA」:

String temp_data = DATA.replaceAll("$", "").replaceAll(" ", ""); 

但它不會刪除$跡象,只有空間。有人知道爲什麼嗎?

感謝, 本雅明

回答

9

第一個參數的replaceAll需要的是一個正則表達式,而正則表達式引擎將$爲代表的線的末端一個特殊字符。與\這樣的退出:

String temp_data = DATA.replaceAll("\\$", "").replaceAll(" ", ""); 

使用的replaceAll和替換下面是一個例子:

import junit.framework.TestCase; 

public class ReplaceAllTest extends TestCase { 

    private String s = "asdf$zxcv"; 

    public void testReplaceAll() { 
     String newString = s.replaceAll("\\$", "X"); 
     System.out.println(newString); 
     assertEquals("asdfXzxcv", newString); 
    } 

    public void testReplace() { 
     String newString =s.replace("$", ""); 
     System.out.println(newString); 
     assertEquals("asdfzxcv", newString); 
    } 
} 
+0

是的,它的工作原理和解釋問題,但沒有必要使用'replaceAll(String regExp) '如果你想消除單個字符。 – 2010-11-09 13:53:59

+0

謝謝。爲我工作很好。 – MByD 2010-11-09 14:02:27

+0

@Andreas_D:你是對的,我添加了一個使用替換方法的例子。 – 2010-11-09 21:28:11

4

replaceAll需要一個正則表達式 - 和 「$」 在正則表達式的特殊含義。

儘量只replace代替:

String temp_data = DATA.replace("$", "").replace(" ", ""); 
+0

但更換需要單個字符,並把一個單個字符,所以我不能用它刪除字符,只能用其他字符替換。 – MByD 2010-11-09 14:00:34

+0

@MByD:不,過載需要兩個CharSequences(例如字符串)。您是否嘗試運行我提供的確切代碼? – 2010-11-09 14:17:13

+0

是的。我嘗試過並拋棄了這條線。 – MByD 2010-11-09 15:31:39

3

String.replaceAll使用正則表達式匹配應該被替換的字符。然而,在正則表達式中,$是一個特殊符號,表示字符串結束,因此它不會被識別爲字符本身。

您可以逃脫$符號,或者僅使用String.replace方法,對普通字符串的工作原理:

String temp_data = DATA.replace("$", "").replace(" ", ""); 

// or 
String temp_data = DATA.replaceAll("\\$", "").replaceAll(" ", ""); 

// or even 
String temp_data = DATA.replaceAll("\\$| ", "");