可能重复:
Java的:使用Unicode划线显示平方根当字符串的长度?
如何获得字符串的Unicode字符数?
给定char[]
的泰语字符:
[อ, ภ, ิ, ช, า, ต, ิ]
这出来的字符串为:Apichart。
String.length()
返回7.我知道有(技术上)7个字符,但我需要一个能返回我5.在屏幕上代表字符空格的确切数目的方法。
可能重复:
Java的:使用Unicode划线显示平方根当字符串的长度?
如何获得字符串的Unicode字符数?
给定char[]
的泰语字符:
[อ, ภ, ิ, ช, า, ต, ิ]
这出来的字符串为:Apichart。
String.length()
返回7.我知道有(技术上)7个字符,但我需要一个能返回我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”。
您可以适应张贴在这里这个问题的解决方案:
统一在Java字符串转换
通过剥离“#”字符和字符串清点剩余的字符。
您可以使用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。