Java中的货币解析
Posted
技术标签:
【中文标题】Java中的货币解析【英文标题】:Currency Parsing in Java 【发布时间】: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()
返回的值分配给一个字符串变量,就像您现在所做的那样。你的那部分代码很好。
【参考方案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
分别转换为int
或double
和Integer.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)
【讨论】:
以上是关于Java中的货币解析的主要内容,如果未能解决你的问题,请参考以下文章