C#で文字列の全角と半角を判定・文字列の文字数とバイト数を利用

公開日時:   更新日時:
C#で文字列の全角と半角を判定・文字列の文字数とバイト数を利用
基本情報技術者試験の試験対策はこちら>>

SE
C#で文字列の全角と半角を判定する方法を教えてください。

PM
それぞれの判定の仕方について説明します。

C#で文字列の全角と半角を判定する


C#のプログラムで文字列の入力やデータをチェックする際など、文字種の判定が必要になる事があります。

ここでは、C#で文字列の全角と半角を判定する方法を解説します。

文字列の文字数とバイト数を利用する

Shift_JISにおいて全角は2バイト、半角は1バイトで表します。それを利用して文字数の差により、文字列に存在する全角と半角の文字数を計算出来ます。

C#においてこれを判定する場合、具体的には、バイト数の取得にEncodingクラスのGetByteCountメソッドを使用します。この結果と文字列のLengthプロパティによって計算します。

Encodingクラスのインスタンス(ここでは「shiftjisEnc」とします)の作成は以下のようにします。

文字列「chkStr」のバイト数を変数「chrByteNum」に代入する場合はGetByteCountメソッドを使用して以下のようにします。

全角を判定する

Shift_JISにおいて全角文字は2バイト、半角文字は1バイトですから、全角文字1文字あたり1だけ文字数よりバイト数が上回る事になります。

よって全角文字数はバイト数から文字数を引けば計算できます。この計算結果を変数「numFullWidth」に代入するコードをC#では以下のように書きます。

全て全角文字かどうかはバイト数が文字数の2倍かどうかで判定できます。この判定を変数「isAllFullWidth」に代入するコードをC#では以下のように書きます。

半角を判定する

半角文字に関しては、文字数とバイト数が同じです。よって半角文字数は文字数の2倍からバイト数を引けば出ます。全角文字は2バイトですから文字数の2倍からバイト数を引いても0、半角文字は1バイトですから文字数の2倍からバイト数を引くと文字数になります。

この文字数「numHalfWidth」を計算するコードはC#で以下のように書きます。

全て半角文字かどうかはバイト数と文字数が等しいかどうかで判定できます。この判定を変数「isAllHalfNum」に代入するコードはC#で以下のように書きます。

全角半角判定のテストコード

以上を踏まえて、C#で全角と半角を判定するプログラムを組みます。用意したテスト用文字列に対して、入力文字列に対して全角のみかどうか・全角文字数・半角のみかどうか・半角文字数をそれぞれ出力します。

テストコードの出力結果

C#での判定テストコードの出力結果は以下の通りです。「あがA阿5」・「アガa5」・「あがA阿5アガa5」についてそれぞれ全角のみかどうか・全角文字数・半角のみかどうか・半角文字数が出力されます。半角文字においては濁点も1文字にカウントされます。

「あがA阿5」は全て全角の5文字、「アガa5」は全て半角の5文字、「あがA阿5アガa5」は全角と半角が5文字ずつ含まれているので以下の通りに出力されます。

SE
C#で全角と半角の判定について理解できました。

PM
文字列の仕様を確実に把握してプログラムの仕様を作ることで正しい文字列を判定しましょう。

文字列の特性を理解して全角と半角を判定しましょう

C#における全角と半角の判定方法を解説しました。この記事では文字エンコードがShift_JISのケースを取り上げましたが、エンコードが変わっても文字列の特性を利用して判定するということは変わりません。

EUC_JPやUTF8ですと、半角カナもEUC_JPは2バイト、UTF8は3バイトのマルチバイトです。またUTF8を含め、Unicodeでは同じ全角文字でも可変長です。

これらの場合は文字コードによる判定が必要になります。記号文字には等幅フォントであっても半角2文字分の幅でないフォントもありますので、入力を許容する場合は判定の際に考慮します。

文字列の仕様を確実に把握してプログラムの仕様を作ることで、正しく文字列を判定しましょう。


FEnetへの登録は左下のチャットが便利です 経験者優遇! 最短10秒!

.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags