Java: символ валюты, основанный на коде валюты ISO 4217

Ниже программа печатает символ валюты с кодом валюты ISO 4217.

import java.util.*;

public class Currency{

    public static void main(String args[]) {
        Currency myInstance = Currency.getInstance(args[0]);
        System.out.println(myInstance.getSymbol());
    }
}

Проблема: отлично работает, когда вводится строка USD. Для других входов, таких как евро, просто верните код валюты.

Пример ввода, вывод из программы:

input: java Currency USD 
output: $
input: java Currency EUR
output: EUR -> I expect the symbol of Euro here

4 ответа

Решение

Currency.getSymbol() возвращает символ валюты относительно локали по умолчанию.

Получает символ этой валюты для локали по умолчанию. Например, для доллара США символ "$" если языком по умолчанию является США, в то время как для других языков это может быть "US$", Если символ не может быть определен, возвращается код валюты ISO 4217.

использование Currency.getSymbol(Locale locale) если вы хотите символ для другой локали.

System.out.println(
   Currency.getInstance("USD").getSymbol(Locale.US)
);
// prints $

System.out.println(
   Currency.getInstance("USD").getSymbol(Locale.FRANCE)
);
// prints USD

System.out.println(
   Currency.getInstance("EUR").getSymbol(Locale.US)
);
// prints EUR

System.out.println(
   Currency.getInstance("EUR").getSymbol(Locale.FRANCE)
);
// prints €

( см. также на ideone.com).

Для меня ваш код даже в первом случае возвращает USD. Кажется, что Валюта сильно зависит от версии JRE (для меня 1.6). Perosnally я рекомендую вам написать свой собственный модуль преобразования CUR в символы - это будет намного проще, чем пытаться использовать этот.

Если кому-то это нужно, наоборот (например, € -> EUR)

String currency = €;
String currencyCode = "";
for (Currency c : Currency.getAvailableCurrencies()) {
    if (c.getSymbol().equals(currency)) {
        currencyCode = c.toString();
    }
}

Использование ограниченного перечисления Locale только обслуживает западные символы. Если вы хотите быть более глобальным, попробуйте использовать локали, предоставленные:

Locale[] locales = Locale.getAvailableLocales();

Использование Locales из этого списка давало символы, а не TLA довольно последовательно.

Другие вопросы по тегам