4

重複の可能性:
Java: Unicode オーバーラインを使用して平方根を表示する場合の文字列の長さ?

文字列内の Unicode 文字の数を取得するにはどうすればよいですか?

char[]タイ文字の a が与えられた場合:

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

これは文字列では次のようになります: อภิชาติ</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

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 が返されます。

于 2012-10-05T07:09:44.923 に答える