2020年09月27日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 867 count

【入門級】数字の文字コードは値の順に並んでいる

Written By: 川俣 晶連絡先

"012345678"かどうかを判定せよ §

 その文字が数字の1文字であり、9ではないことを判定するメソッドが必要となりました。既存の判定メソッドは使えません。

 どう書けば良いでしょうか?

 正攻法で書いたのがサンプルソースのtestChar1メソッドです。

 長いですね。

 特定の文字群の中に指定の文字が含まれるかは文字列のContainsメソッドで判定できます。

 これがサンプルソースのtestChar2メソッドです。

 ずっと短いですね。

 しかし、アラビア数字の文字には以下の特徴があります。

  • 0から9まで順番に並んでいる
  • 他の文字は割り込まない

 ですから、不等号で文字の番号を比較して安全です。ch >= '0' && ch <= '8'という比較式は間違いなく0,1,2,3,4,5,6,7,8だけを区別します。

 これがサンプルソースのtestChar3メソッドです。

罠の数々 §

  • アラビア数字の0から9までは順番に並んでいる。しかし、漢数字の一から九までが順番に並んでいるわけではない
  • 大文字のAからZ、小文字のaからzも順番だが、ウムラウトなどが含まれると順番に並んでいるとは見なせない。また大文字と小文字も並んでいない
  • 文字の並び順を決めているのはUnicodeある。C#でも.NETでもない。

参考リンク §

String.Contains メソッド

 一般的には判定する文字の並び順が規則正しいことは希で、実はcharTest2のパターンが使われることも多い。そのような意味でString.Contains メソッドは便利である。String.Contains メソッドには文字を判定する以外の使い方もあるので、上記リンクを辿って様々なバリエーションを確認しておこう。

リポジトリ §

https://github.com/autumn009/cshowto

NumberCharCode §

using System;

class Program

{

    private static bool charTest1(char ch)

    {

        return ch == '0'

            || ch == '1'

            || ch == '2'

            || ch == '3'

            || ch == '4'

            || ch == '5'

            || ch == '6'

            || ch == '7'

            || ch == '8';

    }

    private static bool charTest2(char ch)

    {

        return "012345678".Contains(ch);

    }

    private static bool charTest3(char ch)

    {

        return ch >= '0' && ch <= '8';

    }

    static void Main()

    {

        Console.WriteLine($"charTest1('A')={charTest1('A')}");

        Console.WriteLine($"charTest1('3')={charTest1('3')}");

        Console.WriteLine($"charTest2('A')={charTest2('A')}");

        Console.WriteLine($"charTest2('3')={charTest2('3')}");

        Console.WriteLine($"charTest3('A')={charTest3('A')}");

        Console.WriteLine($"charTest3('3')={charTest3('3')}");

    }

}

実行結果

charTest1('A')=False

charTest1('3')=True

charTest2('A')=False

charTest2('3')=True

charTest3('A')=False

charTest3('3')=True

Facebook

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
09月
28日
【入門級】文字列の中の1文字は読み出せるのに書き換えられない
3days 0 count
total 873 count
【C# コーディング How To】の前のコンテンツ
2020年
09月
26日
【入門級】1文字なのにLengthプロパティが2になる文字がある
3days 0 count
total 1189 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20200927102345
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.