【问题标题】:Number of characters in Java String [duplicate]Java字符串中的字符数[重复]
【发布时间】:2012-09-26 05:16:53
【问题描述】:

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

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

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

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

这在 String 中显示为: อภิชาติ

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

【问题讨论】:

标签: java unicode utf-8 thai


【解决方案1】:

似乎您只是不想将 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”。

【讨论】:

  • 是的,就是这样。非常感谢!
【解决方案2】:

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

Unicode to string conversion in Java

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 2012-02-21
      • 2011-09-24
      • 2013-09-15
      • 1970-01-01
      相关资源
      最近更新 更多