我试图在String上大写和规范化unicode字符,但没有一个方法按预期工作。 以下是相关代码:
String in = input.getText().toString();
in.toUpperCase();
System.out.println(in);
in= Normalizer.normalize(in,Normalizer.Form.NFC);
System.out.println(in);
stripOut.setText(in);
首先是" toUpperCase()"方法什么都不做。 第二个"标准化"方法不会删除重音但会将它们移动到下一个字符。 输入输出示例:
Input: φάε ήλιο δεν ξέρεις
UpperCase.out﹕ φάε ήλιο δεν ξέρεις
Normalize.out φάε ήλιο δεν ξέρεις
Input: Βέλγιο φορά δρόμους γιατί
UpperCase.out: Βέλγιο φορά δρόμους γιατί
Normalize.out: Βέλγιο φορά δρόμους γιατί
有什么想法吗?
答案 0 :(得分:1)
首先,“toUpperCase()”方法不会做任何事情。
Java字符串是不可变的,您没有捕获该方法返回的新的大写字符串。
其次,“Normalize”方法不会删除重音,而是将它们移动到下一个字符。
标准化不会删除重音。它只是确保以一致的方式表示unicode字符。
要删除重音符号,请对已分解的NFD表单进行标准化并删除非字母字符。见Is there a way to get rid of accents and convert a whole string to regular letters?
答案 1 :(得分:0)
String在java中是不可变的。你不能改变它"在"调用值
" in.toUpperCase();"
如果你想这样做,你可以通过
来做 in= in.toUpperCase();