Java中的货币解析

Java中的货币解析,java,regex,currency,number-formatting,Java,Regex,Currency,Number Formatting,我正在尝试解析一个html标记,到目前为止,我得到了如下文本: “指导价50000英镑” 或 “50000英镑” 甚至 “50000英镑-55000英镑” 在第三种情况下,为了使事情更简单,我只需要列出第一个价格 我的问题是如何将以下数字转换成整数或双精度,最好是整数,因为这些数字相当大。数字格式化程序会这样做吗?或者我需要一个正则表达式,特别是当一些文本跟踪标记块时 目前为止我所得到的示例 String priceNumber = url.select("span.price").text()

我正在尝试解析一个html标记,到目前为止,我得到了如下文本:

“指导价50000英镑”

“50000英镑”

甚至

“50000英镑-55000英镑”

在第三种情况下,为了使事情更简单,我只需要列出第一个价格

我的问题是如何将以下数字转换成整数或双精度,最好是整数,因为这些数字相当大。数字格式化程序会这样做吗?或者我需要一个正则表达式,特别是当一些文本跟踪标记块时

目前为止我所得到的示例

String priceNumber = url.select("span.price").text();  //using JSoup Libary
String priceNumber = priceNumber.replaceAll("[^\\d.])
我想这会去除所有不是数字的东西。
如果示例中有两个数字,如何获取第一个数字?

您可以将任何
字符串
转换为
int
double
,分别使用
Integer.parseInt(\\String您要转换)
double.parseDouble(\\String您要转换)

在第一种和第二种情况下,这将使您
50000
。 在第三个cae中,您需要先将字符串拆分为2,然后重复该技巧


您的标题有点误导,因为您没有询问如何从英镑转换为欧元。

使用带有
匹配器的正则表达式。查找
以搜索出现的情况,然后删除逗号并尝试解析。以下是十进制:

String input = "£50,000 - £55,000";
Pattern regex = Pattern.compile("\\d[\\d,\\.]+");
Matcher finder = regex.matcher(input);
if( finder.find() ) { // or while() if you want to process each
  try {
    double value = Double.parseDouble(finder.group(0).replaceAll(",", ""));
    // do something with value
  } catch (NumberFormatException e ) {
    // handle unparseable
  }
}

使用正则表达式删除不重要的字符,然后将结果解析为double。如果只关心美元值,则可以截断为int

NumberFormat format = NumberFormat.getInstance();
format.parse(priceNumber.replaceAll("[^\\d]*([\\d,]*).*", "$1")).doubleValue()
替换模式的第一部分匹配并丢弃前导字符,第二部分
([\\d,])
保存下一系列数字和逗号,然后第三部分
*
丢弃其余输入

然后,整个输入被替换为第一个保存的匹配的内容(替换模式的第二部分)


然后使用NumberFormat类解析数字(如果不是逗号的话,可以使用
Double.parseDouble()

我想这会管用的

    String string = "This is £50,000 pounds, this is £5.00 pounds.";
    String newString = string;

    while (string.contains("£")) {

        if (string.indexOf("£") != -1) {
            // it contains £
            string = string.substring(string.indexOf("£"));
            newString = string.substring(0, string.indexOf(" "));

            string = string.replaceFirst(newString, "");

            newString = newString.replaceAll("£", "");
            newString = newString.replaceAll(",", "");

            double money = Double.parseDouble(newString);

            System.out.println(money);
        }
    }
您可以尝试(在所有情况下)

请尝试以下正则表达式:

   ((\$|£)\d+\s|(\$|£)\d+-(\$|£)\d+\s)

你能提供一个你现在拥有的代码示例吗?字符串是不可变的,所以我的示例不是很好。我需要一个字符串缓冲区的exmaple来选择第一个数字减去逗号、点和货币符号,并将其作为整数返回。你不需要字符串缓冲区(或者StringBuilder,如果您需要这样的东西,它应该是您的第一选择)。只需像您现在这样将
replaceAll()
返回的值分配给字符串变量。您的代码的这一部分很好。我在总线@Jake上卡住了,看起来很有希望,我将尝试执行500、50000或50000000的价格范围
   ((\$|£)\d+\s|(\$|£)\d+-(\$|£)\d+\s)