|
.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 記事ランキング
本日
月間