Ява получить цену и символ - PullRequest
2 голосов
/ 27 марта 2012

У меня есть строка, содержащая цены на товары. Как извлечь все цены в тексте в ситуации, когда символ валюты сначала не известен.

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 ]

2 голосов
/ 27 марта 2012

Вместо добавления символов валюты в строку, вы можете использовать \u20a6 в строке для нигерийской валюты и \ufdfc в строке для валюты Саудовской Аравии.

2 голосов
/ 27 марта 2012

Существует класс символов регулярного выражения для символов валюты:

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 голос
/ 17 декабря 2014

В настоящее время я работаю над небольшой функцией, использующей регулярное выражение для получения суммы цены внутри строки:

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 -> 12,34

$ 12,34 -> 12,34

12,00 $ -> 12,00

$ 12 -> 12

12 € -> 12

12,11 € -> 12,11

12,999 € -> 12,99

12,9 € -> 12,9

£ 999,99 € -> 999,99

...

1 голос
/ 27 марта 2012

Java имеет синтаксис для записи всех символов Unicode , которые он может обработать, синтаксис выглядит как '\ uffff'

Символы Unicode определены достаточно тщательно, чтобы можно было найти связанные группы. Это говорит о том, что список всех символов валюты Unicode

Вооружившись этими символами Юникода в регулярном выражении, вы можете найти деньги где угодно: -)

Документация Oracle (ранее Sun) по регулярным выражениям содержит целый набор классов символов, которые включают валюту.

Я не знаю, какая версия Unicode на самом деле реализована. Ссылка, которую я нашел в Oracle, была «Поддерживаемые блоки и категории соответствуют стандарту Unicode, версия 3.0». который согласно группе Unicode был сентябрь 1999 года, так что это то, что я предполагаю.

Это включает в себя фунты стерлингов и евро, так что я в порядке :-), но это может быть не совсем актуально, хотя человечество не изобретает валюты слишком часто.

Это было бы немного утомительно, но вы могли бы сгенерировать строку с каждым кодом символа (по одному за раз), проверить соответствие символам валюты регулярного выражения и проверить, включены ли те, которые вам особенно интересны.

На самом деле есть еще одна проблема. Разные страны используют разные знаки для десятичной точки, а некоторые страны ставят символ после суммы. Пока что я не нашел хорошего решения для этого (http://stackoverflow.com/questions/9185793/how-do-i-get-the-currency-symbol-of-a-currency-as-it-would-appear-in-one-of-its) не имеет хорошего ответа.

Так что вам может понадобиться найти число по обе стороны от символа валюты.

1 голос
/ 27 марта 2012

Для приведенной выше строки сначала можно просто проанализировать пробелы, а затем, если они содержат цифры, получить результат.

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