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

如何从java字符串中提取未知数字,java,extract,Java,Extract,我在模态中有一句话,例如“你的余额是29,2欧元”,我需要得到一个数字并存储它。但有一个数字是动态的。所以我不知道确切的数值。它可以是整数也可以是十进制。 然后我需要将这个值(已经存储的值)与下一页上的值进行比较 谢谢您的帮助:)欢迎使用SO:) 考虑到字符串是静态的,并且您希望在其中找到一个值,我建议您使用。如果您不想添加额外的依赖项,那么您可以自己实现此方法,如下所示: public static String substringBetween(String initial, String

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

谢谢您的帮助:)

欢迎使用SO:)

考虑到字符串是静态的,并且您希望在其中找到一个值,我建议您使用。如果您不想添加额外的依赖项,那么您可以自己实现此方法,如下所示:

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);
}
  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();
  }
接下来的问题是,用逗号分隔小数不是Java的标准,因此
29,2
不能通过
Double.valueOf
Double.parseDouble
来解决。您需要:

  • 用点替换逗号,这可以通过使用
    str.replaceAll(“,”,“)
  • 使用一个。例如,法国地区的默认NumberFormat使用逗号分隔小数
最终解决方案如下所示:

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);
}
  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
的实现更改为使用
substring
regex
,将
parseAsDouble
的实现更改为使用
Double.parseDouble
在将逗号替换为点之后。您应该使用regex。这有点模糊,缺少很多上下文,但您可能需要深入研究正则表达式等。但是,感觉您的设计失败了,因为不需要出于比较原因从字符串中提取值。您应该查看Scanner类。