如何从字符串java中提取未知数字



我有一个语气词句子,例如"你的余额是29.2欧元;我需要得到一个数字并存储它。但数字是动态的。所以不知道确切的数值。它可以是整数也可以是十进制。然后我需要将这个值(已经存储的值(和下一页上的值进行比较。

感谢您的帮助:(

欢迎使用SO:(

假设您的字符串是静态的,并且您想在其中找到一个值,我建议您使用ApacheCommons的substringBetween。如果你不想添加额外的依赖项,那么你可以自己实现这个方法,它看起来像这样:

public static String substringBetween(String initial, String open, String close) {
int start = str.indexOf(open) + open.length();
int end = str.indexOf(close, start);
return str.substring(start, end);
}

那么接下来的问题是,用逗号分隔小数不是Java的标准,所以29,2不会用Double.valueOfDouble.parseDouble来解决。您需要:

  • 将逗号替换为句点,这可以通过使用str.replaceAll(",", ".")来实现
  • 使用数字格式。例如,法国区域设置的默认NumberFormat使用逗号分隔小数

最终解决方案如下所示:

public static void main(String[] args) throws ParseException {
String initialString = "Your balance is 29,2 euro";

double doubleValue = parseAsDouble(findValue(initialString));
System.out.println(doubleValue);
}
private static String findValue(String initial) {
return StringUtils.substringBetween(initial, "Your balance is ", " euro");
}
private static double parseAsDouble(String value) throws ParseException {
return NumberFormat.getInstance(Locale.FRANCE)
.parse(value)
.doubleValue();
}

如前所述,在将逗号替换为句点后,可以将findValue的实现更改为使用substringregex,将parseAsDouble的实现更改为由使用Double.parseDouble

最新更新