有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我在模态中有一句话,例如“你的余额是29,2欧元”,我需要得到一个数字并存储它。但有一个数字是动态的。所以我不知道确切的数值。它可以是整数也可以是十进制。 然后我需要将这个值(已经存储的值)与下一页上的值进行比较

谢谢您的帮助:)


共 (1) 个答案

  1. # 1 楼答案

    欢迎来到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.valueOfDouble.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();
      }
    

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