C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
生徒
「先生、C#で文字列が数字かどうかを調べる方法ってありますか?」
先生
「もちろんありますよ。C#では、char.IsDigitやint.TryParseなどを使って簡単に判定できます。」
生徒
「なるほど。でも、char.IsDigitってどんな動きをするんですか?」
先生
「それでは、文字列が数値かどうかを調べる方法を、初心者の方にもわかりやすく順番に説明していきましょう!」
1. C#で文字列が数値かを判定するとは?
C#で「文字列が数値かどうかを判定する」とは、文字列に数字以外の文字が含まれていないかを調べる処理のことです。たとえば「123」は数字の文字列ですが、「12a3」は途中にアルファベットが混じっているので数値とはいえません。
このような判定を行うことで、ユーザーが入力した値が正しいかを確認したり、計算に使えるかどうかを判断することができます。
2. char.IsDigitメソッドを使って1文字ずつ判定する
char.IsDigitメソッドは、C#で用意されている文字が数字(0~9)かどうかを判定するメソッドです。文字列全体をチェックしたい場合は、1文字ずつ調べる方法を使います。
string text = "12345";
bool isAllDigits = true;
foreach (char c in text)
{
if (!char.IsDigit(c))
{
isAllDigits = false;
break;
}
}
if (isAllDigits)
{
Console.WriteLine("文字列はすべて数字です。");
}
else
{
Console.WriteLine("文字列に数字以外の文字が含まれています。");
}
文字列はすべて数字です。
このように、char.IsDigitを使うと、数字だけで構成された文字列かどうかを確実に調べることができます。
ここでの「文字」とは、1文字だけのデータのことです。C#では、文字をchar型(キャラクタ型)と呼びます。
3. int.TryParseを使って数値として変換できるか調べる
char.IsDigitは1文字ずつ調べる方法ですが、もっと簡単に「文字列全体を数値に変換できるか」を判定する方法もあります。それがint.TryParseです。
TryParseは、「変換できたかどうか」を真偽値(true / false)で返してくれる便利なメソッドです。変換に成功した場合は、数値に変換された結果を変数に入れてくれます。
string text = "4567";
bool result = int.TryParse(text, out int number);
if (result)
{
Console.WriteLine("数値に変換できました。値は " + number + " です。");
}
else
{
Console.WriteLine("数値に変換できません。");
}
数値に変換できました。値は 4567 です。
int.TryParseは、入力が数字だけの場合にtrueを返します。たとえば、「123」は変換できますが、「12a」や「abc」は変換できず、falseになります。
また、数値が大きすぎる場合(例:9999999999999など)も、intの範囲を超えると変換に失敗します。そのような場合は、long.TryParseなど、より大きな型を使うと良いでしょう。
4. char.IsNumberとの違いを知っておこう
C#にはchar.IsNumberというメソッドもあります。IsDigitとの違いは、数字として認識される文字の範囲が広いことです。たとえば、ローマ数字や全角数字なども判定対象に含まれます。
通常の半角数字(0~9)だけを判定したい場合は、char.IsDigitを使うのが安心です。もし多言語対応のプログラムで全角数字も扱いたい場合は、IsNumberのほうが便利です。
char c1 = '3';
char c2 = '3'; // 全角の3
Console.WriteLine(char.IsDigit(c1)); // true
Console.WriteLine(char.IsDigit(c2)); // false
Console.WriteLine(char.IsNumber(c2)); // true
True
False
True
このように、C#の文字列判定は目的に応じてメソッドを使い分けることが大切です。
5. 実践:ユーザー入力が数値かどうかをチェックする
ここまでの知識を使って、ユーザーが入力した文字列が数値かどうかをチェックするサンプルを見てみましょう。コンソールから入力を受け取り、それが数字なら変換して表示、そうでなければエラーメッセージを出します。
Console.Write("数字を入力してください:");
string input = Console.ReadLine();
if (int.TryParse(input, out int value))
{
Console.WriteLine("入力された数値は " + value + " です。");
}
else
{
Console.WriteLine("入力が数値ではありません。もう一度入力してください。");
}
数字を入力してください:123
入力された数値は 123 です。
このように、TryParseを使えば、エラーを出さずに安全に数値チェックを行えます。初心者のうちは、TryParseを使う方法から覚えるのがおすすめです。
6. 用途に応じて使い分けよう
文字列が数字だけかを調べたい場合はchar.IsDigit、実際に数値として変換できるかを判定したい場合はTryParseを使うのが一般的です。
どちらの方法も、C#での文字列処理の基礎として非常に重要なテクニックです。文字列操作の練習を重ねることで、より正確で安全なプログラムを作れるようになります。
まとめ
C#で文字列が数値かどうかを判定する処理は、入力チェックやデータ変換において非常に重要な役割を果たします。特に、ユーザーからの入力や外部システムから取得した値を扱う際、正しく数値として扱えるかを確認しないまま処理を続けると、予期しないエラーが発生してしまうことがあります。そのため、信頼性の高いアプリケーションを作るためには、入力値が数値かどうかを判定する手法をきちんと理解しておく必要があります。
本記事では、char.IsDigitやint.TryParseといったC#の標準メソッドを活用して、文字列が数値かを簡単に判定する方法をご紹介しました。それぞれに特徴があり、使いどころも異なります。たとえば、1文字ずつ確認して「全てが数字か」を調べたいときにはchar.IsDigitが有効で、文字列全体を数値として扱えるかを確認したいときにはTryParseのほうが便利です。
char.IsDigitとTryParseの違いを再確認
同じ「数値かどうかを判定する」という目的でも、それぞれのメソッドの用途は異なります。
// char.IsDigitを使った判定(1文字ずつチェック)
string input1 = "12345";
bool isAllDigits = input1.All(c => char.IsDigit(c));
Console.WriteLine(isAllDigits); // True
// int.TryParseを使った判定(全体で数値に変換できるか)
string input2 = "12345";
bool canConvert = int.TryParse(input2, out int value);
Console.WriteLine(canConvert); // True
True
True
上記のように、用途に応じて使い分けることで、無駄なエラーを防ぎ、安全な処理を実現できます。また、char.IsDigitは0〜9の半角数字に限定される一方で、char.IsNumberは全角数字やローマ数字なども含むため、グローバル対応が必要な場面ではIsNumberを検討するのも良い判断です。
実践的な使い方:フォーム入力の検証に応用
実際のアプリケーションでは、フォームからの入力値をチェックする場面がよくあります。たとえば、年齢や価格、数量など、数値であることが前提となるフィールドでは、入力が有効かどうかをTryParseで確かめておくことで、例外の発生を防ぎ、ユーザーに対しても親切なエラーメッセージを表示できます。
Console.Write("年齢を入力してください:");
string input = Console.ReadLine();
if (int.TryParse(input, out int age))
{
Console.WriteLine("年齢は " + age + " 歳ですね。");
}
else
{
Console.WriteLine("数値を入力してください(例:30)。");
}
年齢を入力してください:abc
数値を入力してください(例:30)。
上記のように、TryParseを使えばプログラムの安定性が向上し、ユーザーの入力ミスにも柔軟に対応できます。例外を起こさずに判定できるのがTryParseの大きなメリットです。
生徒
「先生、今日の内容でchar.IsDigitとTryParseの違いがよくわかりました!」
先生
「それは良かったです。数値判定は、文字列を安全に処理するための基本中の基本ですからね。」
生徒
「TryParseを使えば、例外が出なくて便利ですね。ユーザー入力の確認にも使えそうです。」
先生
「まさにその通り。実際のプログラムでは、入力チェックや条件分岐でTryParseを多用しますよ。今日の内容はぜひ覚えておいてください。」
生徒
「はい!次は数値だけじゃなくて、日付とかもTryParseでチェックできるようになりたいです!」
先生
「良い意欲ですね!その調子で、少しずつデータ型ごとのTryParseも覚えていきましょう。」