【问题标题】:Currency Parsing in JavaJava中的货币解析
【发布时间】:2014-11-25 15:40:27
【问题描述】:

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

“指导价 50,000 英镑”

“50,000 英镑”

甚至

“50,000 英镑 - 55,000 英镑”

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

我的问题是如何将以下数字转换为 int 或 double,最好是 int,因为这些数字非常大。数字格式化程序会这样做还是我需要一个正则表达式,特别是如果一些文本尾随标签块。

到目前为止的示例

String priceNumber = url.select("span.price").text();  //using JSoup Libary
String priceNumber = priceNumber.replaceAll("[^\\d.])

这会删除我认为不是数字的所有内容。 如果示例中有 2 个数字,我如何获得第一个?

【问题讨论】:

  • 你能提供一个你现在拥有的代码示例吗?
  • 字符串也是不可变的,所以我的例子不是很好,我需要一个字符串缓冲区的例子来选择第一个数字减去逗号、点和货币符号并将其作为整数返回
  • 您不需要 StringBuffer(或 StringBuilder,如果您需要这样的东西,它应该是您的首选)。只需将replaceAll() 返回的值分配给一个字符串变量,就像您现在所做的那样。你的那部分代码很好。

标签: java regex currency number-formatting


【解决方案1】:

使用带有Matcher.find 的正则表达式来搜索匹配项,然后删除逗号并尝试解析。这是小数点:

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
  }
}

【讨论】:

  • 我被困在公共汽车上@Jake 看起来很有希望,我将尝试将价格范围设为 500 或 50,000 或 50,000,000
【解决方案2】:

您可以将任何String 分别转换为intdoubleInteger.parseInt(\\String you want to convert)Double.parseDouble(\\String you want to convert)

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

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

【讨论】:

    【解决方案3】:

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

    NumberFormat format = NumberFormat.getInstance();
    format.parse(priceNumber.replaceAll("[^\\d]*([\\d,]*).*", "$1")).doubleValue()
    

    替换模式的第一部分[^\\d] 匹配并丢弃前导字符,第二部分([\\d,]) 保存下一系列数字和逗号,然后第三部分.* 丢弃其余输入。

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

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

    【讨论】:

      【解决方案4】:

      我认为这会起作用!

          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);
              }
          }
      

      【讨论】:

        【解决方案5】:

        你可以试试这个(适用于所有情况),

        String priceNumber = "£500001   wcjnwknv122333- £55,000";
        String regex = "£(\\d+,?\\d+)\\D?";
        
        Pattern p =Pattern.compile(regex);
        Matcher m = p.matcher(priceNumber);
        if(m.find()){
            System.out.println(m.group(1));
        }  
        

        【讨论】:

          【解决方案6】:

          试试下面的正则表达式:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-03-13
            • 1970-01-01
            • 1970-01-01
            • 2012-01-29
            相关资源
            最近更新 更多