|   | 
          
 
            
|  
              
 .NET TIPS 
IsDigitメソッド/IsNumberメソッドの違いとは?
デジタルアドバンテージ 一色 政彦 
2005/02/18 | 
  | 
          
 
            
 
              
 
             | 
        
  .NET Frameworkのクラス・ライブラリには、特定の文字(.NETでは文字はすべてUnicode文字として処理される)が「数字」かどうかをチェックするためのメソッドが2つ用意されている。具体的にはIsDigitメソッドとIsNumberメソッドだが(いずれもSystem名前空間のChar構造体の静的メソッド)、それではこの2つのメソッドはどう使い分ければよいのだろうか。本稿ではその使い分け基準を知るために、これらのメソッドの違いをまとめる(なお、以下の解説ではローマ数字などの機種依存文字を使用しているため、Windows以外の環境ではそれらの文字は文字化けする可能性がある)。
 なお、ここでいう「数字」とは幅広い意味で「数を表す文字」を指しており、例えば1、2といった10進数の数字だけでなく、@、Aといった文字数字などもこれに含まれる。
 まず、それぞれのメソッドは次のようにして利用する(C#の場合の例)。これらのメソッドのパラメータに指定した文字が数字ならばTrueをその戻り値として返し、そうでなければFalseを返す。
bool bDigit  = Char.IsDigit(']');   // Falseが返却される
bool bNumber = Char.IsNumber(']');  // Trueが返却される
 この例を見れば分かるように、メソッドにより数字として有効になる(つまり戻り値がTrueになる)文字が違うわけである。そこでその「有効な文字」の違いを次の表にまとめた。
| メソッド | 
Unicodeカテゴリ | 
有効な文字 | 
| IsDigitメソッド | 
DecimalDigitNumber | 
「0」〜「9」(=半角)、「0」〜「9」(=全角)の10進数の数字 | 
| IsNumberメソッド | 
DecimalDigitNumber | 
同上(「0」〜「9」、「0」〜「9」の10進数の数字) | 
| LetterNumber | 
「T」〜「]」、「@」〜「I」、「〇」などの文字数字 | 
| OtherNumber | 
「@」〜「S」などの10進数の数字でも文字数字でもない数値 | 
  | 
| IsDigitメソッドとIsNumberメソッドにおける「有効な文字」の違い | 
| 「Unicodeカテゴリ」とはUnicode文字が属するグループである。すべての数字はUnicodeカテゴリにより分類されており、これら2つのメソッドが文字を数字として判断する基準は、その文字が属しているカテゴリに基づく。クラス・ライブラリでは、UnicodeカテゴリはUnicodeCategory列挙体で定義されている。また文字が属するUnicodeカテゴリはChar.GetUnicodeCategoryメソッドにより取得できる。 | 
 上の表を見れば分かるように、IsDigitメソッドよりも、IsNumberメソッドの方が広範な数字に対して有効となる。ただし、IsNumberメソッドでも漢数字の「一」や「壱」などは、数字と見なさない仕様のようである。注意してほしい。
          
 
            
カテゴリ:クラス・ライブラリ 処理対象:文字列 
使用ライブラリ:Char構造体(System名前空間) | 
        
 
        
 
|  
 | 
 
generated by  
 | 
 
 
 | 
 
 
	
		Insider.NET 記事ランキング
		
		
			本日
			月間