替换字符串中的美元符号

3
我使用下面这行代码来删除给定数据 “DATA” 中的所有 $ 符号和空格:

我用以下一行代码来移除指定数据 "DATA" 中的所有 $ 符号和空格:

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

但是它不会删除$符号,只会删除空格。有人知道为什么吗?
谢谢, Binyamin
3个回答

10

replaceAll方法的第一个参数是正则表达式,而正则表达式引擎会将字符 $ 视为特殊字符,表示行尾。可以通过在$前加上反斜杠 \ 转义它,如下所示:

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

这里有一个使用replaceAll和replace的示例:

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);
    }
}

是的,它可以工作并解释问题,但如果您想消除单个字符,则无需使用 replaceAll(String regExp) - Andreas Dolk
@Andreas_D:你是对的,我添加了一个使用replace方法的示例。 - Nathan Hughes

4

replaceAll 方法需要一个正则表达式,而在正则表达式中 "$" 有特殊的含义。

可以尝试使用 replace 方法代替:

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

但是replace只能替换一个字符,无法用于删除字符,只能用其他字符进行替换。 - MByD
@MByD:不,有一个重载函数可以接受两个CharSequences(例如字符串)。您尝试运行我提供的确切代码了吗? - Jon Skeet
@MByD:您使用的Java版本是哪个?replace(CharSequence, CharSequence)是在1.5中引入的。 - Jon Skeet
我正在使用Eclipse SDK版本3.2.1,JVM版本为java.vm.version=1.4.2_03-b02。 - MByD

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( "\\$| ", "" );

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