我得到的输出是打印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(",","."));
}
}
答案 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)
x = x.replaceAll(Pattern.quote("."), "");
告诉Java .
不具有特殊含义的正则表达式.
,但字符串为.
。
其他解决方案:
replace
.
退出\\.
(转义正则表达式由\
完成,但在Java \
中写入\\
)答案 4 :(得分:0)
从String.replaceAll(String regex, String replacement)
<强>正则表达式强>
- 与此字符串匹配的正则表达式
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.getCurrencyInstance或DecimalFormat。 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);
}