java得到价格和符号

时间:2012-03-26 21:14:57

标签: java regex currency

我有一个包含商品价格的字符串。如何在最初不知道货币符号的情况下提取文本中的所有价格。

I got a wristwatch for $500 and i could sell it to a Nigerian for ₦13,000 or to someone in Saudi Arabia for ﷼800

我如何获得所有价格及其货币符号。

谢谢

5 个答案:

答案 0 :(得分:2)

货币符号有一个正则表达式字符类:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

// (incomplete) list of currency symbols, enhance from http://www.unicode.org/charts/PDF/U20A0.pdf
private static final String CURRENCY_SYMBOLS= "\\p{Sc}\u0024\u060B";

public static void main(String[] args) {
    Pattern p = Pattern.compile("[" +CURRENCY_SYMBOLS + "][\\d,]+");

    Matcher m = p.matcher("I got a wristwatch for $500 and i could sell it to a Nigerian for " +
            "₦13,000 or to someone in Saudi Arabia for ﷼800 or Afghanistan for ؋350");

    while (m.find()) {
        System.out.println(m.group());
    }
 }
}

//Output is:
// $500
// ₦13,000
// ﷼800
// ؋350

答案 1 :(得分:2)

您可以在字符串中使用\u20a6代替尼日利亚货币,而不是将货币符号添加到字符串中,而在沙特阿拉伯货币的字符串中使用\ufdfc

答案 2 :(得分:1)

对于上面的字符串,首先你可以简单地解析空格,然后如果它们包含数字就得到结果。

    String[] strArr = givenString.split(" ");
    List<String> result = new ArrayList<String>();
    for(String s : strArr){
        if(Pattern.compile("[0-9]").matcher(s).find())
            result.add(s);
    }

答案 3 :(得分:1)

Java具有编写它可以处理的所有Unicode符号的语法,语法类似于'\ uffff'

非常仔细地定义Unicode符号,以便可以找到相关的组。这表示所有Unicode currency symbols

的列表

在正则表达式中使用这些Unicode符号,你可以在任何地方找到钱: - )

regular expressions上的Oracle(néeSun)文档包含一整套包含货币的字符类。

我不知道哪个版本的Unicode 实际实现了。我在Oracle上发现的参考文献是“受支持的块和类别是Unicode标准版本3.0”。根据{{​​3}}是1999年9月,这就是我所假设的。

这包括GBP£和Euro€所以我没关系:-)但它可能不是最新的,尽管人类不会经常发明货币。

这有点单调乏味,但你可以生成一个包含每个字符代码的字符串(一次一个),并测试与正则表达式货币符号的匹配,并检查包含你特别关注的那些。

实际上还有一个问题。不同的国家/地区对小数点使用不同的标记,有些国家/地区将符号放在金额后面。到目前为止,我还没有找到一个很好的解决方案(http://stackoverflow.com/questions/9185793/how-do-i-get-the-currency-symbol-of-a-currency-as-it-would - 出现在其中一个)没有好的答案。

因此,您可能需要在货币符号的任一侧查找数字。

答案 4 :(得分:1)

我目前正在开发一个使用正则表达式的小函数来获取字符串中的价格数量:

private static String getPrice(String input)
{
    String output = "";

    Pattern pattern = Pattern.compile("\\d{1,3}[,\\.]?(\\d{1,2})?");
    Matcher matcher = pattern.matcher(input);
    if (matcher.find())
    {
        output = matcher.group(0);
    }

    return output;
}

这似乎适用于小价格(0,00至999,99)和各种货币:

$ 12.34 - &gt; 12.34

$ 12,34 - &gt; 12,34

$ 12.00 - &gt; 12.00

$ 12 - &gt; 12

12€ - &gt; 12

12,11€ - &gt; 12,11

12.999€ - &gt; 12.99

12.9€ - &gt; 12.9

£999.99€ - &gt; 999.99

...