действительно ли возможно перенаправить помеху, cerr, суд, stdin, stdout, и/или stderr?
Да. Вы хотите
rdbuf
функция.ofstream ofs("logfile"); cout.rdbuf(ofs.rdbuf()); cout << "Goes to file." << endl;
единственная разница между помехой и cerr буферизация?
, Насколько я знаю, да.
Определение «символов Юникода» расплывчато, но будет означать символы 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. Не уверен, что вам это нужно. Если вы хотите заменить на произносимый символ, вам действительно нужно создать сопоставление. Конечно, это утомительная работа, но она
Вы можете перебирать вашу строку и для каждого вызова символа
If (Character.UnicodeBlock.of(c) != Character.UnicodeBlock.BASIC_LATIN) {
// replace with Y
}
Вы можете пойти другим путем и спросить, является ли этот символ символом ascii.
public static boolean isAscii(char ch) {
return ch < 128;
}
Тогда, конечно, вам придется анализировать строку char с помощью char.
( метод взят из commons-lang CharUtils , который содержит множество полезных методов Character)
Из вашего примера я не уверен, что вы пытаетесь сделать - если вы просто пытаетесь заменить все значения, отличные от ASCII, на Y, тогда вы можете перебрать строку, ища для кодовых точек за пределами диапазона от 0 до 127 и замените их этими кодовыми точками на Y.
Мне не совсем ясно, что именно дает преобразование «AÜXÜ» в «AYXY». Это потому, что Ü произносится как Y на определенном языке? Какой язык? И какие еще правила могут применяться?
С точки зрения терминологии ...
"a"
Это строка Unicode. Он содержит один символ в кодировке UTF-16.