Преобразовать строку в другую локаль в java

Я не знаю технических деталей, но насколько я могу помнить, переменная является не чем иным как ссылкой от текущего стекового фрейма, и пока эта ссылка не удалена, объект не может быть собран "мусор". Теперь, но явно устанавливая его в NULL, Вы удостоверились, что ссылки не стало. Если Вы не делаете Вы в основном позволяете VM решить, когда эта ссылка очищена, который мог бы или не мог бы быть после выхода из объема (в отличие от C++, если объект расположен на стеке и ДОЛЖЕН быть уничтожен). Это могло бы быть, когда стековый фрейм перезаписывается со следующим. Я не уверен, существует ли на самом деле VM, который делает это.

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

27
задан RYN 15 March 2011 в 18:14
поделиться

4 ответа

Я достиг этого с помощью класса java.math.BigDecimal. Ниже приведен фрагмент кода

String arabicNumerals = "۴۲۴۲.۴۲";
String englishNumerals = new BigDecimal(arabic).toString();
System.out.println("Number In Arabic : "+arabicNumerals);
System.out.println("Number In English : "+englishNumerals);

Результат

Number In Arabic : ۴۲۴۲.۴۲
Number In English : 4242.42

NB: Вышеприведенный код не будет работать, если в arabicNumerals есть какие-либо символы, отличные от числовых цифр. Например: ۲۴۲,۲۴۲. [приведет к java.lang.NumberFormatException, поэтому вы можете удалить другие символы, используя Character.isDigit(char ch) в другой логике и использовать приведенные выше код. Все нормальные случаи работают очаровательно !!

Добрый день

18
ответ дан 28 November 2019 в 04:20
поделиться

Character.getNumericValue(ch) спасли мою жизнь, универсальное решение для любой локали.

static String replaceNonstandardDigits(String input) {
    if (input == null || input.isEmpty()) {
        return input;
    }

    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < input.length(); i++) {
        char ch = input.charAt(i);
        if (Character.isDigit(ch) && !(ch >= '0' && ch <= '9')) {
            int numericValue = Character.getNumericValue(ch);
            if (numericValue >= 0) {
                builder.append(numericValue);
            }
        } else {
            builder.append(ch);
        }
    }
    return builder.toString();
}
1
ответ дан 28 November 2019 в 04:20
поделиться

Я думаю, что лучший способ - это изменить Locale на то, что вы хотите, например,
для двойного числа:

NumberFormat fmt = NumberFormat.getNumberInstance(Locale.US);
d = Double.parseDouble(s);

для String:

NumberFormat.getNumberInstance(Locale.US).format(s);

или десятичный формат:

double num;
DecimalFormat df = new DecimalFormat("###.###");
df.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));
String s = df.format(num);
2
ответ дан 28 November 2019 в 04:20
поделиться

Попробуйте это, ребята:

/**
 * Utility class to detect arabic languages and convert numbers into arabic digits.
 *
 * @author Ahmed Shakil
 * @date 09-24-2012
 */
public final class ArabicUtil {

private static final char[] DIGITS = {'\u0660','\u0661','\u0662','\u0663','\u0664','\u0665','\u0666','\u0667','\u0668','\u0669'};

/**
 * Returns <code>true</code> if the provided language code uses arabic characters; othersise <code>false</code>.
 * @param lang ISO language code.
 * @return <code>true</code> if the provided language code uses arabic characters; othersise <code>false</code>
 */
public static boolean isArabic (String lang) {
    return "ar".equals(lang) || "fa".equals(lang) || "ur".equals(lang);
}

/**
 * Convert digits in the specified string to arabic digits.
 */
public static String convertDigits (String str) {
    if (str == null || str.length() == 0) return str;

    char[] s = new char[str.length()];
    for(int i =0;i<s.length;i++)
        s[i] = toDigit( str.charAt( i ) );

    return new String(s);
}

/**
 * Convert single digit in the specified string to arabic digit.
 */
public static char toDigit (char ch) {
    int n = Character.getNumericValue( (int)ch );
    return n >=0 && n < 10 ? ARABIC[n] : ch;
}

/**
 * Convert an int into arabic string.
 */
public static String toString (int num) {
    return convertDigits( Integer.toString( num ) );
}
}

Кстати, есть разница между арабскими цифрами и урду / фарси: арабский:

private static final char[] ARABIC     = {'\u0660', '\u0661', '\u0662', '\u0663', '\u0664', '\u0665', '\u0666', '\u0667', '\u0668', '\u0669'};

урду или фарси:

private static final char[] URDU_FARSI = {'\u06f0', '\u06f1', '\u06f2', '\u06f3', '\u06f4', '\u06f5', '\u06f6', '\u06f7', '\u06f8', '\u06f9'};
8
ответ дан 28 November 2019 в 04:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: