java - Java Unicode字符串长度

  显示原文与译文双语对照的内容
0 0

我正在努力获取unicode字符串的计数,并尝试了各种选项。 看起来有点小问题,但却很大的问题。

这里我试图得到str1的长度。 我将它的作为 6. 其实是 3 。

基本上我想测量长度并打印每个字符。

 public class one {
 public static void main(String[] args) {
 String str1 = new String("குமார்");
 System.out.print(str1.length());
 }
}

这是泰米尔语语言。

时间: 原作者:

0 0

查看构造函数类。 有一个解释可能是导致你问题的原因。 使用 Unicode,你可以通过几种方式对字符进行编码,比如 Á:

 U+00C1 LATIN CAPITAL LETTER A WITH ACUTE

或者

 U+0041 LATIN CAPITAL LETTER A
 U+0301 COMBINING ACUTE ACCENT

你可以尝试使用 Normalizer 将字符串转换为组合形式,然后在字符上迭代。


编辑: @halex 高于建议的文章的基础上,尝试在java:

 String str = new String("குமார்");
 ArrayList<String> characters = new ArrayList<String>();
 str = Normalizer.normalize(str, Form.NFC);
 StringBuilder charBuffer = new StringBuilder();
 for (int i = 0; i <str.length(); i++) {
 int codePoint = str.codePointAt(i);
 int category = Character.getType(codePoint);
 if (charBuffer.length()> 0
 && category!= Character.NON_SPACING_MARK
 && category!= Character.COMBINING_SPACING_MARK
 && category!= Character.CONTROL
 && category!= Character.OTHER_SYMBOL) {
 characters.add(charBuffer.toString());
 charBuffer.delete(0, charBuffer.length());
 }
 charBuffer.appendCodePoint(codePoint);
 }
 if (charBuffer.length()> 0) {
 characters.add(charBuffer.toString());
 }
 System.out.println(characters);

我得到的结果是 [கு, மா, ர்] 。 如果没有对所有字符串工作,请尝试fiddeling与 if 块中的其他Unicode字符类别。

原作者:
0 0

如上所述,你的字符串包含 6个不同的代码点。 一半是字母,另一半是元音符号。 ( 组合标记)

你可以使用内置到ICU4J库中的转换,删除所有不是字母的元音符号,这些符号不是使用规则:

[:^Letter:] 删除

并计算结果字符串。 在他们的演示站点上试用:

http://demo.icu-project.org/icu-bin/translit

我不会将结果字符串显示给最终用户,因此我不是专家,所以规则可能需要调整才能得到一般的情况,但它是一个想法。

原作者:
...