可能重复:
Java: length of string when using unicode overline to display square roots?
如何获取字符串中的Unicode字符数?
给出char[]
个泰国字符:
[อ, ภ, ิ, ช, า, ต, ิ]
这在String中出现: อภิชาติ
String.length()
返回7.我知道(技术上)有7个字符,但我需要一个能够返回5的方法。这就是屏幕上显示的字符空间的确切数量。
答案 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)
答案 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.