C# で文字列を整数に変換するコード例の詳細解説
C# で文字列を整数に変換する方法
C# で文字列を整数に変換する方法はいくつかあります。主に次の方法が使用されます。
- int.Parse() メソッド: 文字列を整数に変換します。変換に失敗すると例外が発生します。
- int.TryParse() メソッド: 文字列を整数に変換する試みを行います。成功すると true を返し、変換された整数を out パラメータに格納します。失敗すると false を返します。
コード例
using System;
namespace StringToIntExample
{
class Program
{
static void Main(string[] args)
{
string strNumber = "123";
// int.Parse()
int num1;
try
{
num1 = int.Parse(strNumber);
Console.WriteLine("int.Parse(): " + num1);
}
catch (FormatException)
{
Console.WriteLine("int.Parse(): 変換エラー");
}
// int.TryParse()
int num2;
if (int.TryParse(strNumber, out num2))
{
Console.WriteLine("int.TryParse(): " + num2);
}
else
{
Console.WriteLine("int.TryParse(): 変換エラー");
}
// Convert.ToInt32()
int num3 = Convert.ToInt32(strNumber);
Console.WriteLine("Convert.ToInt32(): " + num3);
}
}
}
説明
- int.Parse() は直接的な変換方法ですが、変換に失敗すると例外が発生するため、エラー処理が必要になります。
- int.TryParse() は例外が発生しないため、安全な変換方法です。変換結果を bool 値で確認できます。
- Convert.ToInt32() も直接的な変換方法ですが、int.Parse() と同様、変換に失敗すると例外が発生します。
どの方法を使うべきか
一般的には、int.TryParse() が推奨されます。例外処理が不要で、変換成功かどうかを簡単に確認できるためです。ただし、変換失敗時の処理が必要な場合は、int.Parse() や Convert.ToInt32() も使用できます。
注意点
- 文字列が整数として解釈できない場合、変換は失敗します。
- オーバーフローが発生する可能性があるため、入力値の範囲に注意してください。
- .NET Framework では、int は 32 ビット整数です。他の整数型が必要な場合は、適切な型を使用してください。
- このコードは C# の基本的な構文とライブラリを使用しています。
- エラー処理や例外ハンドリングの適切な実装は重要です。
C# で文字列を整数に変換するコード例の詳細解説
コード例復習
using System;
namespace StringToIntExample
{
class Program
{
static void Main(string[] args)
{
string strNumber = "123";
// int.Parse()
int num1;
try
{
num1 = int.Parse(strNumber);
Console.WriteLine("int.Parse(): " + num1);
}
catch (FormatException)
{
Console.WriteLine("int.Parse(): 変換エラー");
}
// int.TryParse()
int num2;
if (int.TryParse(strNumber, out num2))
{
Console.WriteLine("int.TryParse(): " + num2);
}
else
{
Console.WriteLine("int.TryParse(): 変換エラー");
}
// Convert.ToInt32()
int num3 = Convert.ToInt32(strNumber);
Console.WriteLine("Convert.ToInt32(): " + num3);
}
}
}
各行の詳細解説
using System;
: System 名前空間を使用することを宣言します。この名前空間には、Console クラスなど、C# でよく使うクラスが定義されています。namespace StringToIntExample
: 名前空間を定義します。名前空間は、クラスやメソッドなどを整理するための仕組みです。class Program
: プログラムのメインとなるクラスを定義します。static void Main(string[] args)
: プログラムの実行開始点が定義されます。string strNumber = "123";
: 変数strNumber
に文字列 "123" を代入します。これが変換の対象となる文字列です。
int.Parse()
int num1;
: 整数型の変数num1
を宣言します。try
:int.Parse()
メソッドの実行中に例外が発生した場合に備えて、try-catch ブロックを使用します。num1 = int.Parse(strNumber);
:strNumber
を整数に変換し、その結果をnum1
に代入します。変換に成功すると、次の行に進んで結果が出力されます。catch (FormatException)
: 変換に失敗した場合(例えば、文字列に数字以外の文字が含まれている場合)に、この catch ブロック内のコードが実行されます。ここでは、エラーメッセージを出力します。
if (int.TryParse(strNumber, out num2))
:int.TryParse()
メソッドを使用して、strNumber
を整数に変換を試みます。変換に成功すると、num2
に変換結果が格納され、if 文の条件が true になります。else
: 変換に失敗した場合、else ブロック内のコードが実行されます。
Convert.ToInt32()
int num3 = Convert.ToInt32(strNumber);
:Convert.ToInt32()
メソッドを使用して、strNumber
を整数に変換し、その結果をnum3
に代入します。int.Parse()
と同様に、変換に失敗すると例外が発生します。
各メソッドの比較
- int.Parse(): 直接的に変換を行うが、変換に失敗すると例外が発生する。
- int.TryParse(): 例外が発生せず、変換の成否を bool 値で確認できる。
- Convert.ToInt32(): int.Parse() と同様、直接的な変換を行うが、変換に失敗すると例外が発生する。
一般的には、int.TryParse() が安全で使いやすいとされています。
さらに詳しく
- NumberStyles:
int.Parse()
やint.TryParse()
では、NumberStyles
パラメータを指定することで、変換する数値の形式を細かく制御できます。 - CultureInfo: 異なるカルチャでの数値表現に対応するために、
CultureInfo
を使用できます。 - オーバーフロー: 変換結果が整数型の範囲を超える場合、オーバーフローが発生します。
このコード例では、C# で文字列を整数に変換する3つの方法を紹介しました。それぞれのメソッドの特性を理解し、適切な方法を選択することで、より安全で効率的なプログラムを作成することができます。
- 特定のメソッドについてもっと詳しく知りたい
- 他のデータ型への変換方法を知りたい
- 例外処理について詳しく知りたい
- 具体的な使用例を知りたい
従来の方法の復習
これまで、int.Parse()
、int.TryParse()
、Convert.ToInt32()
の3つの方法で文字列を整数に変換する方法を見てきました。これらの方法は、一般的なケースでよく使用されます。
より柔軟な変換方法
しかし、より複雑な状況や特殊なケースでは、これらの方法だけでは対応できない場合があります。以下に、より柔軟な変換方法をいくつか紹介します。
LINQ を利用した変換
- 数値文字列のみ抽出: LINQ の
Where()
メソッドを使って、文字列から数値文字のみを抽出し、その後string.Concat()
で連結することで、数値部分だけを取り出すことができます。 - カスタム変換ロジック: LINQ の
Select()
メソッドを使って、各文字を数値に変換するカスタムロジックを適用することができます。
string strNumber = "123a45";
int num = strNumber.Where(char.IsDigit).Aggregate("", (s, c) => s + c).ToInt32();
正規表現を利用した変換
- 複雑なパターン: 正規表現を使って、より複雑なパターンで数値を抽出することができます。
- カスタム置換: 正規表現の置換機能を使って、不要な文字を削除したり、文字列を整形することができます。
using System.Text.RegularExpressions;
string strNumber = "123a45";
int num = int.Parse(Regex.Replace(strNumber, @"[^0-9]", ""));
カスタムパーサーの作成
- 高度なカスタマイズ: 自前のパーサーを作成することで、任意の形式の文字列を解析し、数値に変換することができます。
- 特定のフォーマット: 特定のフォーマットの文字列しか扱わない場合、カスタムパーサーの方が効率的かもしれません。
int CustomParse(string str)
{
// カスタムのパーシングロジックを実装
}
- シンプルで一般的なケース:
int.Parse()
やint.TryParse()
が最もシンプルで使いやすいです。 - 数値以外の文字が含まれる場合: LINQ や正規表現を利用して、数値部分だけを抽出することができます。
- 複雑なフォーマットの文字列: カスタムパーサーを作成することで、柔軟に対応できます。
- 例外処理: 上記の方法でも、変換に失敗する可能性があります。適切な例外処理を必ず実装してください。
- パフォーマンス: カスタムパーサーなど、複雑な処理を行う場合は、パフォーマンスに注意が必要です。
- 可読性: コードの可読性を保つため、適切な変数名やコメントを使用しましょう。
文字列を整数に変換する方法は、状況によって最適なものが異なります。今回紹介した方法以外にも、様々なアプローチが考えられます。ご自身のプロジェクトの要件に合わせて、最適な方法を選択してください。
- 「特定のフォーマットの文字列を整数に変換したいのですが、どうすれば良いでしょうか?」
- 「パフォーマンスが重要な場合、どの方法が最適でしょうか?」
また、以下の点についても詳しく解説できます。
- LINQ の詳細な使い方
- 正規表現の書き方
- カスタムパーサーの作成方法
- 数値のフォーマットについて
c# .net string