4

可能重复:
Java:使用 unicode overline 显示平方根时的字符串长度?

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

给定一个char[]泰语字符:

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

这在字符串中显示为:อภิชาติ</p>

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

4

3 回答 3

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”。

于 2012-10-05T05:25:57.083 回答
1

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

Java中的Unicode到字符串转换

通过剥离“#”字符并计算字符串中剩余的字符。

于 2012-10-05T04:54:27.917 回答
0

您可以使用 ajava.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。

于 2012-10-05T07:09:44.923 回答