这个replaceAll()有什么问题?

时间:2014-01-16 12:33:18

标签: java string replaceall

我得到的输出是打印x的值,剩下两个println打印空行。

1.234.567,89



Process finished with exit code 0

我做错了什么?

public class Dummy {

    public static void main(String args[]) {
        String x = "1.234.567,89 EUR";
        String e = " EUR";
        x = x.replaceAll(" EUR","");
        System.out.println(x);
        x = x.replaceAll(".", "");
        System.out.println(x);
        x = x.replaceAll(",",".");
        System.out.println(x);
           //System.out.println(x.replaceAll(" EUR","").replaceAll(".","").replaceAll(",","."));
    }
}

6 个答案:

答案 0 :(得分:9)

问题在于,x = x.replaceAll(".", "");会将所有字符替换为"",因此在第二个x之后您会有一个空的replaceAll()

请注意,replaceAll()方法的第一个参数是正则表达式。

将其更改为:

x = x.replaceAll("\\.", "");

答案 1 :(得分:3)

String#replaceAll()方法将正则表达式作为第一个参数。正则表达式中的.匹配除换行符之外的任何字符。这就是它取代一切的原因。

您可以改为使用String#replace()

x = x.replace(" EUR","");
System.out.println(x);
x = x.replace(".", "");
System.out.println(x);
x = x.replace(",",".");

答案 2 :(得分:1)

使用

System.out.println(x.replaceAll(" EUR","").replaceAll("\\.","")
                                                 .replaceAll(",","."));

而不是

System.out.println(x.replaceAll(" EUR","").replaceAll(".","")
                                                 .replaceAll(",","."));

您必须使用.

\\.

您可以按单一行执行此操作

System.out.println(x.replaceAll(" EUR|\\.|,",""));

答案 3 :(得分:0)

使用Pattern#quote

x = x.replaceAll(Pattern.quote("."), "");

告诉Java . 具有特殊含义的正则表达式.,但字符串为.

其他解决方案:

  • 使用接受字符串的replace
  • .退出\\.(转义正则表达式由\完成,但在Java \中写入\\

答案 4 :(得分:0)

String.replaceAll(String regex, String replacement)

读取JavaDoc
  

<强>正则表达式

     
      
  • 与此字符串匹配的正则表达式
  •   

The dot (.) matches (almost) any character.要转义dot使用backslash\),Java需要双反斜杠(\\)。

转义点后的固定代码如下所示。

public static void main(String args[]) {
    String x = "1.234.567,89 EUR";
    String e = " EUR";
    x = x.replaceAll(" EUR","");
    System.out.println(x);
    x = x.replaceAll("\\.", "");
    System.out.println(x);
    x = x.replaceAll(",",".");
    System.out.println(x);        
}

答案 5 :(得分:0)

作为替代解决方案:

考虑使用NumberFormat.getCurrencyInstanceDecimalFormat。 NumberFormat提供parse方法。

E.g。尝试:

final NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.GERMANY);
if (currencyFormat instanceof DecimalFormat) {
    final DecimalFormat currencyDecimalFormat = (DecimalFormat) currencyFormat;

    final DecimalFormatSymbols decimalFormatSymbols = currencyDecimalFormat.getDecimalFormatSymbols();
    decimalFormatSymbols.setCurrencySymbol("EUR");
    currencyDecimalFormat.setDecimalFormatSymbols(decimalFormatSymbols);

    currencyDecimalFormat.setParseBigDecimal(true);

    System.out.println(currencyFormat.format(new BigDecimal("1234567.89")));
    final BigDecimal number = (BigDecimal) currencyFormat.parse("1.234.567,89 EUR");
    System.out.println(number);
}