尝试操作时出现错误:
private Double isEmpty(String some) {
LOGGER.info("Se ha llamado a isEmpty, valor: " + some);
Double empty = null;
try {
if (some != null) {
// Reemplazar porque nosotros usamos los . para los miles
if(some.contains(".")) {
some = some.replaceAll(".", "");
}
if(some.contains(",")) {
some = some.replaceAll(",", ".");
}
empty = Double.parseDouble(some);
LOGGER.info("Nuevo valor en isEmpty en Double: " + some);
}
} catch (Exception ex) {
LOGGER.error("*******************");
LOGGER.error("************ Falló la ejecución isEmpty *************");
LOGGER.error(ex.getMessage() + ex);
LOGGER.error(ex.getLocalizedMessage());
LOGGER.error("*******************");
}
return empty;
}
在我的国家“ 1.000”中是一千,在美国是一... 然后我将所有字符替换为英语格式...
例如在我的国家:“ 2.035,75€”-> 235和75,这是我无法解析的。我确实替换->
该Java的“ 2035.75”承认了该数字。但是我得到了错误->
Se ha llamado a isEmpty, valor: 19.425
2018-10-16 ERROR 6197 --- [nio-8090-exec-5] Imp : *******************
2018-10-16 ERROR 6197 --- [nio-8090-exec-5] Imp : ************ Falló la ejecución isEmpty *************
2018-10-16 ERROR 6197 --- [nio-8090-exec-5] Imp : empty Stringjava.lang.NumberFormatException: empty String
2018-10-16 ERROR 6197 --- [nio-8090-exec-5] Imp : empty String
2018-10-16 ERROR 6197 --- [nio-8090-exec-5] Imp : *******************
答案 0 :(得分:3)
replaceAll
接受一个正则表达式,而.
是匹配任何内容的正则表达式字符,因此some.replaceAll(".", "")
替换了所有内容。您需要先使用.
:
some = some.replaceAll("\\.", "");
或简单地使用replace
代替f,它不接受正则表达式,而是常规的CharSequence
或char
:
some = some.replace(".", "");
请注意,如果您使用的是IDE,则可能会在正则表达式部分突出显示一个字眼,我建议使用以下一个:
答案 1 :(得分:3)
您应该考虑使用本地化解决问题。请参阅Converting different countrys currency to double using java
您可以尝试以下操作:
public BigDecimal parseMoney(String some) {
try {
Locale yourLocale = new Locale("es", "ES");
return parse(some, yourLocale);
} catch (ParseException pe) {
return null;
}
}
public BigDecimal parse(String amount, Locale locale) throws ParseException {
final NumberFormat format = NumberFormat.getNumberInstance(locale);
if (format instanceof DecimalFormat) {
((DecimalFormat) format).setParseBigDecimal(true);
}
return (BigDecimal) format.parse(amount);
}
请注意
isEmpty
并没有执行其名称所建议的操作,因此我将其更改为parseMoney
Double
,所以我将退货类型更改为BigDecimal
Locale("es", "ES")
,但请确保根据需要进行调整答案 2 :(得分:1)
更改此行
some = some.replaceAll(".", "");
到
some = s.replaceAll("\\.", "");
因为.
(点)表示与所有人匹配。
答案 3 :(得分:1)
replaceAll
需要两个参数:第一个是正则表达式,第二个是要替换的子字符串。
因此在正则表达式.
中具有任何单个字符的含义,因此在您编写代码时some = some.replaceAll(".", "")
尝试:some = some.replaceAll("\\.", "")
答案 4 :(得分:-1)
我认为您不需要执行replaceAll。下面的代码应该可以工作
String some = "19.27";
double d = Double.parseDouble(some);
System.out.println("String " + some + " is parse to double value : " + d);