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