.NETエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnet.NETナビ
  2. .NETコラム
  3. プログラミング言語
  4. C#
  5. C#で文字列の全角と半角を判定・文字列の文字数とバイト数を利用

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

  • C#
  • プログラミング言語
公開日時:   更新日時:
C#で文字列の全角と半角を判定・文字列の文字数とバイト数を利用
この記事でわかること
    基本情報技術者試験の試験対策はこちら>>

    システム
    エンジニア
    C#で文字列の全角と半角を判定する方法を教えてください。

    プロジェクト
    マネージャー
    それぞれの判定の仕方について説明します。

    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文字ずつ含まれているので以下の通りに出力されます。

    システム
    エンジニア
    C#で全角と半角の判定について理解できました。

    プロジェクト
    マネージャー
    文字列の仕様を確実に把握してプログラムの仕様を作ることで正しい文字列を判定しましょう。

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

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

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

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

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

    FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    C#新着案件New Job