首页 > 解决方案 > 如何从String java中提取未知数字

问题描述

我有一个模态句子,例如“您的余额是 29,2 欧元”,我需要获取一个数字并存储它。但是一个数字是动态的。所以不知道具体数值。它可以是整数也可以是小数。然后我需要将此值(已存储的值)与下一页上的值进行比较。

感谢您的任何帮助 :)

标签: javaextract

解决方案


欢迎来到 SO :)

鉴于您的字符串是相当静态的并且您想在其中找到一个值,我建议您使用Apache Commons 的 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.valueOfor解决Double.parseDouble。您将需要:

  • 用点替换逗号,这可以通过使用来实现str.replaceAll(",", ".")
  • 使用NumberFormat。例如,法国语言环境的默认 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();
  }

如前所述,您可以在用点替换逗号后更改findValueto use substringorregex和 to use 的实现parseAsDoubleDouble.parseDouble


推荐阅读