Как перевести код страны в соответствующую валюту? - PullRequest
0 голосов
/ 27 июня 2011

Мне нужно преобразовать код страны в валюту в моем приложении для пользователя.

Исходя из моей библиотеки геолокации, я знаю, находится ли пользователь в США (США), Германии (DE), Швейцарии (CH), Японии (JPY) и т. Д. Теперь мне нужно преобразовать код страны в соответствующая валюта:

US -> USD ($)
DE -> EURO (€)
CH -> CHF (CHF)
JP -> YEN (JPY)

Как я могу сделать это на Java?

Ответы [ 3 ]

3 голосов
/ 27 июня 2011

Да.Стандарт JDK поддерживает основные иностранные валюты:

System.out.println(DecimalFormat.getCurrencyInstance(Locale.US).format(12.34));
System.out.println(DecimalFormat.getCurrencyInstance(Locale.FRANCE).format(12.34));

Выходы:

$12.34
12,34 €

Надеюсь, это полезно.

1 голос
/ 27 июня 2011

Вы должны проанализировать эту страницу и сохранить ее в своей базе данных.

Трудно создать хорошие базы данных, подходящие для потребностей приложений из интернет-источников, но это действительно того стоит.Чтобы разобрать html, я предлагаю вам попробовать регулярное выражение, и если оно становится слишком сложным, используйте apache jericho или тег суп .

0 голосов
/ 27 июня 2011

А как насчет этого?Это хак, но, похоже, работает нормально.

/**
 * 
 */
package lt;

import java.util.Currency;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

/**
 * LocaleTest - LocaleTest
 * @version 1.0
 * @author <a href="mailto:Dessimat0r@ntlworld.com">Chris Dennett</a>
 */
public class LocaleTest {
    public static final Map<String, Currency> CURRENCIES = new HashMap<String, Currency>();
    static {
        for (Locale l : Locale.getAvailableLocales()) {
            try {
                Currency c = Currency.getInstance(l);

                if (c != null) {
                    CURRENCIES.put(l.getCountry(), c);
                    System.out.println("key: " + l.getCountry() + ", loc: " + l + ", curr: " + c + " (" + c.getSymbol(l) + ")");                
                }
            } catch (IllegalArgumentException e) {

            }
        }
    }

    public static final void main(String args[]) {
        if (args == null || args.length == 0 || (args[0] = args[0].trim()).isEmpty()) {
            System.out.println("Please provide an argument!");
            return;
        }
        System.out.println("LocaleTest: got " + args[0] + " as argument");
        Currency c = CURRENCIES.get(args[0]);
        if (c != null) {
            System.out.println("LocaleTest: got " + c + " (" + c.getSymbol() + ") as currency");
        } else {
            System.out.println("LocaleTest: no currency found for " + args[0]);
        }
    }
}

Вывод с учетом ГБ:

...
key: YE, loc: ar_YE, curr: YER (?.?.?)
key: MK, loc: mk_MK, curr: MKD (Den)
key: CA, loc: en_CA, curr: CAD ($)
key: VN, loc: vi_VN, curr: VND (?)
key: NL, loc: nl_NL, curr: EUR (€)
key: US, loc: es_US, curr: USD (US$)
key: CN, loc: zh_CN, curr: CNY (?)
key: HN, loc: es_HN, curr: HNL (L)
key: US, loc: en_US, curr: USD ($)
..
LocaleTest: got GB as argument
LocaleTest: got GBP as currency

Проблема в том, что валюта может отображать имя в виде символа, а не символа ($£ и т. Д.).Валюта должна быть создана с языком страны происхождения, чтобы это работало.Если вы исправите это, у вас могут остаться валюты с символами, которые выглядят неправильно.

...