Java String中的字符数

时间:2012-10-05 04:48:23

标签: java unicode utf-8 thai

  

可能重复:
  Java: length of string when using unicode overline to display square roots?

如何获取字符串中的Unicode字符数?

给出char[]个泰国字符:

[อ, ภ, ิ, ช, า, ต, ิ]

这在String中出现: อภิชาติ

String.length()返回7.我知道(技术上)有7个字符,但我需要一个能够返回5的方法。这就是屏幕上显示的字符空间的确切数量。

3 个答案:

答案 0 :(得分:5)

似乎你只是想不将unicode标记统计为单独的字符;

static boolean isMark(char ch)
{
    int type = Character.getType(ch);
    return type == Character.NON_SPACING_MARK ||
           type == Character.ENCLOSING_MARK ||
           type == Character.COMBINING_SPACING_MARK;
}

可以用作;

String olle = "อภิชาติ";
int count = 0;

for(int i=0; i<olle.length(); i++)
{
    if(!isMark(olle.charAt(i)))
        count++;
}

System.out.println(count);

并返回'5'。

答案 1 :(得分:1)

您可以在此处调整发布到此问题的解决方案:

Unicode to string conversion in Java

通过剥离&#39;#&#39;字符和计算字符串中剩余的字符。

答案 2 :(得分:0)

您可以使用java.text.BreakIterator找到字形之间的间隙(“视觉字符”)并计算它们。这是一个例子:

import java.text.BreakIterator;

..

int graphemeLength(String str) {
    BreakIterator iter = BreakIterator.getCharacterInstance();
    iter.setText(str);

    int count = 0;
    while (iter.next() != BreakIterator.DONE) count++;

    return count;
}

现在graphemeLength("อภิชาติ")将返回5.