Как я обнаруживаю unicode символы в строке Java?

действительно ли возможно перенаправить помеху, cerr, суд, stdin, stdout, и/или stderr?

Да. Вы хотите rdbuf функция.

ofstream ofs("logfile");
cout.rdbuf(ofs.rdbuf());
cout << "Goes to file." << endl;

единственная разница между помехой и cerr буферизация?

, Насколько я знаю, да.

21
задан Geo 4 November 2009 в 12:40
поделиться

5 ответов

Определение «символов Юникода» расплывчато, но будет означать символы UTF-8, не охваченные стандартной кодировкой ISO 8859 . Если это верно в вашем случае, затем переберите все символы в строке и проверьте ее код, чтобы определить, находится ли она в заданном наборе символов.

В качестве альтернативы можно использовать Map и символы на карте, содержащие совпадающие ключи. Например:

Map<Character, Character> charReplacementMap = new HashMap<Character, Character>() {{
    put('Ü', 'Y');
    // Put more here.
}};

String originalString = "AÜAÜ";
StringBuilder builder = new StringBuilder();

for (char currentChar : originalString.toCharArray()) {
    Character replacementChar = charReplacementMap.get(currentChar);
    builder.append(replacementChar != null ? replacementChar : currentChar);
}

String newString = builder.toString();

Или вы имеете в виду «все символы с диакритическими знаками»? Если это так, то используйте java.text.Normalizer для удаления диакритических знаков:

/**
 * Remove any diacritical marks (accents like ç, ñ, é, etc) from
 * the given string (so that it returns plain c, n, e, etc).
 * @param string The string to remove diacritical marks from.
 * @return The string with removed diacritical marks, if any.
 */
public static String removeDiacriticalMarks(String string) {
    return Normalizer.normalize(string, Form.NFD)
        .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}

Одна ловушка, Ü станет U, а не Y. Не уверен, что вам это нужно. Если вы хотите заменить на произносимый символ, вам действительно нужно создать сопоставление. Конечно, это утомительная работа, но она

15
ответ дан 29 November 2019 в 20:25
поделиться

Вы можете перебирать вашу строку и для каждого вызова символа

If (Character.UnicodeBlock.of(c) != Character.UnicodeBlock.BASIC_LATIN) {
 // replace with Y
}
14
ответ дан 29 November 2019 в 20:25
поделиться

Вы можете пойти другим путем и спросить, является ли этот символ символом ascii.

public static boolean isAscii(char ch) {
    return ch < 128;
}

Тогда, конечно, вам придется анализировать строку char с помощью char.

( метод взят из commons-lang CharUtils , который содержит множество полезных методов Character)

12
ответ дан 29 November 2019 в 20:25
поделиться

Из вашего примера я не уверен, что вы пытаетесь сделать - если вы просто пытаетесь заменить все значения, отличные от ASCII, на Y, тогда вы можете перебрать строку, ища для кодовых точек за пределами диапазона от 0 до 127 и замените их этими кодовыми точками на Y.

1
ответ дан 29 November 2019 в 20:25
поделиться

Мне не совсем ясно, что именно дает преобразование «AÜXÜ» в «AYXY». Это потому, что Ü произносится как Y на определенном языке? Какой язык? И какие еще правила могут применяться?


С точки зрения терминологии ...

"a"

Это строка Unicode. Он содержит один символ в кодировке UTF-16.

2
ответ дан 29 November 2019 в 20:25
поделиться
Другие вопросы по тегам:

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