分析Java中的全角或半角字符

2023-12-05

我想分析 char 数组中的全角或半角字符。

例如:

char[]密码={'t','e','s','t','思','题'};

这个char数组中有全角和半角字符。

半宽 = t,e,s,t

全角=思,题

那么,如何在java中分析char数组的全角或半角呢?

多谢!


东亚字符的宽度描述于Unicode 标准附件 #11其中谈到East_Asian_WidthUnicode 字符的属性。

虽然我找不到使用标准 Java 8 库查询此属性的方法,但可以使用ICU4J库 (com.ibm.icu.icu4j在 Maven 中)来获取这个值。

例如,以下代码返回UCharacter.EastAsianWidth.WIDE:

int esw = UCharacter.getIntPropertyValue('あ', UProperty.EAST_ASIAN_WIDTH);

对日语字符的一些测试表明,所有单字节 Shift JISkana字符(例如半角)被指定HALFWIDTH,而它们的全角对应项(例如)被指定FULLWIDTH。所有其他全角字符,例如あいうえお return WIDE和非全角字符,例如普通字符Abc return NARROW.

价值AMBIGUOUS需要额外小心,因为它的宽度会根据上下文而变化。例如,vim编辑器有一个ambiwidth option让用户选择是否应将其视为窄的或宽的,因为渲染取决于终端。

上述附件不明确字符的状态: 不明确的字符在东亚传统字符集中作为宽字符出现,但在非东亚使用中作为窄(即正常宽度)字符出现。

It also states for NEUTRAL: 严格来说,对于中性字符谈论窄字符和宽字符是没有意义的,但由于出于所有实际目的,它们的行为类似于 Na,因此根据以下建议将它们视为窄字符(与 Na 相同)。

然而,我发现了Narrow for NEUTRAL情况并非总是如此,因为某些字符在我尝试过的编辑器中可能会显示得很宽。此外,, , , are AMBIGUOUS,而前面的字符 and are NEUTRAL这似乎没有道理。也许字符未映射到icu4j回落到NEUTRAL.

Lastly, UCharacter.EastAsianWidth.COUNT只是一个常量,表示下定义的属性数量UCharacter.EastAsianWidth,而不是一个值getIntPropertyValue()将返回。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分析Java中的全角或半角字符 的相关文章

随机推荐