删除java字符串的格式,同时保留重音字符

ddarikpa  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(372)

如何删除java字符串中的格式,同时保留重音字符?
参见下面的示例。我的目标是ö西尼罗河ä米é@gmail.com(注意怎么做?????。???已更改为gmail.com)

String formattedStr = "öwnNämé@?????.???";
for(int i=0; i < formattedStr.length(); i++) {
   System.out.print(formattedStr.charAt(i));
}

这是上面的输出(奇怪的是,如果我用 print 而不是 println ,打印得很好)

ö
w
n
N
ä
m
é
@
?
?
?
?
?
?
?
?
?
?
.
?
?
?
?
?
?

如果代替 formattedStr.charAt(i) 我用 Integer.toHexString(formattedStr.codePointAt(i)) ,这是输出

f6
77
6e
4e
e4
6d
e9
40
1d5f4
ddf4
1d5fa
ddfa
1d5ee
ddee
1d5f6
ddf6
1d5f9
ddf9
2e
1d5f0
ddf0
1d5fc
ddfc
1d5fa
ddfa
lyr7nygr

lyr7nygr1#

后面的人物 @ 代码点高于0xffff,因此它们不能放入单个 char 价值观。相反,每个这样的字符都表示为两个 char 值,称为代理项。这种编码称为utf-16(当java被创建时,unicode只有16位的值,因为没有人想到会超过2位¹⁶ 需要代码点。)
您可以使用java.text.normalizer将字符转换为公共形式。这个 NFKC (然后是构图)规范化形式将保留重音和其他音调符号。

String converted = Normalizer.normalize(formattedStr, Normalizer.Form.NFKC);
cnwbcb6i

cnwbcb6i2#

你可以通过使用 Normalizer.Form.NFKC :

String response = Normalizer.normalize(formattedStr, Normalizer.Form.NFKC);

这将返回一个不带粗体字符的字符串并打印出来。

ö
w
n
N
ä
m
é
@
g
m
a
i
l
.
c
o
m

相关问题