文字列内の Unicode 文字の数を取得するにはどうすればよいですか?
char[]
タイ文字の a が与えられた場合:
[อ, ภ, ิ, ช, า, ต, ิ]
これは文字列では次のようになります: อภิชาติ</p>
String.length()
7 を返します。(技術的には) 7 文字あることは理解していますが、5 を返すメソッドが必要です。これは、画面上に表示される文字スペースの正確な数です。
文字列内の Unicode 文字の数を取得するにはどうすればよいですか?
char[]
タイ文字の a が与えられた場合:
[อ, ภ, ิ, ช, า, ต, ิ]
これは文字列では次のようになります: อภิชาติ</p>
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' を返します。
a を使用し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 が返されます。