Для текущего проекта программирования, который я делаю, мне нужна возможность преобразовывать слова, содержащие умлауты, отличные от ASCII, такие как «ä», «ö» или «ü», в слова/строки, содержащие Unicode (\u00F6
).
Чтобы достичь этого, я хотел попробовать «новые» потоки Java. До сих пор мне удавалось получить все индексы символов, которые не помещались в кодировку ASCII по умолчанию и поэтому нуждались в замене.
public static void replaceUmlauts() {
char[] chars = "persönlich".toCharArray();
int[] ind = IntStream.range(0, chars.length).filter(i -> chars[i] > 128).toArray();
}
Тем не менее, я не нахожу способа красиво заменить умляуты в указанных индексах их соответствующими представлениями Unicode. Чтобы остаться с одной парадигмой, я хотел бы найти решение Stream, но я также был бы открыт для других эффективных решений для решения проблемы.
Также будут высоко оценены совершенно разные - может быть, даже более простые подходы - ко всем проблемам.
{somename}.properties
. Поскольку у меня возникли некоторые проблемы с кодировкой (CP1252 для компьютеров с Windows и UTF-8 для других систем), я хотел бы сохранить такие строки, какpersönlich
какpers\u00F6lich
, чтобы избежать проблем в дальнейшем. Таким образом, пока работа сpersönlich
и подобными словами прекрасно работает «внутри Java», я твердо верю, что для сохраняемости явное преобразование действительно полезно. - person Marco N.   schedule 12.08.2016String str = raw.chars().mapToObj(c -> (String)(c > 128 ? String.format("\\u%04x", (int) c) : String.valueOf((char)c))).collect(Collectors.joining());
- person Andreas Brunnet   schedule 12.08.2016