2010-11-09 95 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("\\$| ", "");