Подтвердить что ты не робот

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. Для других входов, таких как EUR, просто верните код валюты.

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

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

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

Locale[] locales = Locale.getAvailableLocales();

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