3

char配列で全角または半角文字を解析したいと考えています。

例えば:

char [] password = {'t','e','s','t','思','題'};

このchar配列には全角文字と半角文字があります。

半値幅 = t,e,s,t

full width = 思,題</p>

では、Javaでchar配列の全角または半角を解析するにはどうすればよいですか?

どうもありがとう!

4

5 に答える 5

4

JDK には、全角/半角に言及する 1 つのクラスが含まれています。InputSubset

http://docs.oracle.com/javase/7/docs/api/java/awt/im/InputSubset.html

残念ながら、どの文字がどのサブセットに該当するかを確認する方法はありません。

それにもかかわらず、明らかに全角/半角は、Unicode の明確に定義された概念です。インターネットのどこかに正確な仕様があるかもしれません。

http://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms

http://en.wikipedia.org/wiki/DBCS

0x00-0xFF 文字は半角です。Unicode ブロック「半角および全角形式」の半角文字を除いて、他の文字は全角です。

boolean isHalfWidth(char c)
{
    return '\u0000' <= c && c <= '\u00FF'
        || '\uFF61' <= c && c <= '\uFFDC'
        || '\uFFE8' <= c && c <= '\uFFEE' ;
}
于 2012-11-22T03:31:16.197 に答える
3
于 2016-02-27T04:32:21.933 に答える
1

文字の表示幅は実際に表示するフォントに依存し、Java の文字はフォントに関して抽象的です。

特定の文字がCJK(または言語サブセットなど)文字であるかどうかを判断したい場合は、それらの文字がUTF-16で取るビットパターンの範囲を見つけてみてください(Javaが使用していると思いますか?)各char値がその範囲内に収まるようにします。

ただし、ここで間違ったツリーを完全に吠えている可能性があるため、これがあなたの求めているものかどうかを教えてください.

編集:実際、trashgodのリンクを見た後、Javaエンコーディングが完全に抽象的であるかどうかはわかりません。ただし、文字のドキュメントには全角の 16 進コードの定義があるため、char の比較は依然として適切な方法である可能性があります。

于 2012-11-22T02:41:42.463 に答える
0

別の回答で言及されている「可視幅」とは対照的に、文字の内部表現のビット数について話しているようです。

Java の Character クラスと char プリミティブ型はどちらも標準の Unicode を使用します。ラテン語、中国語、および他の多くの言語を処理します。一部の Unicode 文字は 16 ビットです。いくつかはもっとです。

したがって、あなたの質問に対する答えは次のとおりだと思います。先に進んで、好きなように分析してください。配列には、16ビットの値と、おそらく16ビットを超える値が含まれています。キャラクターで何をしたいのかをもっと知らなければ、これ以上明確にするのは難しい.

編集: 私の間違いです。char プリミティブは 16 ビットの Unicode 値のみを処理します。ただし、Character オブジェクトの配列は、16 ビットを超える Unicode 値を処理します。

于 2012-11-22T02:59:05.723 に答える