[C#] String.ToUpperメソッドの使い方 – 大文字アルファベットに変換する

C#のString.ToUpperメソッドは、文字列内のすべてのアルファベットを大文字に変換するために使用されます。

このメソッドは、元の文字列を変更せず、新しい大文字の文字列を返します。

例えば、"hello".ToUpper()"HELLO"を返します。

ToUpperは文化依存の変換を行うため、特定のカルチャに基づいた大文字変換が必要な場合は、ToUpper(CultureInfo)を使用することも可能です。

この記事でわかること
  • String.ToUpperメソッドの基本的な使い方
  • カルチャ依存性の理解
  • 大文字小文字の比較方法
  • パフォーマンス向上のテクニック
  • 実用的な応用例の紹介

目次から探す

String.ToUpperメソッドとは

C#のString.ToUpperメソッドは、文字列をすべて大文字に変換するためのメソッドです。

このメソッドは、文字列の内容を変更することなく、新しい大文字の文字列を返します。

元の文字列はそのまま保持されるため、必要に応じて元のデータを参照することができます。

ToUpperメソッドは、特にユーザー入力の正規化やデータベース検索時の大文字小文字の区別を無視した比較に役立ちます。

C#では、文字列は不変(immutable)であるため、ToUpperメソッドを使用することで新しい文字列を生成し、元の文字列を変更することなく大文字変換を行うことができます。

このメソッドは、特定のカルチャに依存する場合があるため、カルチャを指定するオプションも用意されています。

これにより、異なる言語や地域における文字の大文字化のルールに従った変換が可能です。

String.ToUpperメソッドの基本的な使い方

単純な文字列の大文字変換

String.ToUpperメソッドを使用すると、単純な文字列を大文字に変換できます。

以下のサンプルコードでは、”hello world”という文字列を大文字に変換しています。

using System;
class Program
{
    static void Main()
    {
        string original = "hello world"; // 元の文字列
        string upperCase = original.ToUpper(); // 大文字に変換
        
        Console.WriteLine(upperCase); // 結果を表示
    }
}
HELLO WORLD

変数を使った大文字変換

変数を使用して、動的に文字列を大文字に変換することも可能です。

以下の例では、ユーザーからの入力を大文字に変換しています。

using System;
class Program
{
    static void Main()
    {
        string userInput = "C# Programming"; // ユーザー入力
        string upperCaseInput = userInput.ToUpper(); // 大文字に変換
        
        Console.WriteLine(upperCaseInput); // 結果を表示
    }
}
C# PROGRAMMING

空文字列やnullに対する動作

ToUpperメソッドは、空文字列やnullに対しても適切に動作します。

空文字列の場合はそのまま空文字列が返され、nullの場合はNullReferenceExceptionが発生します。

以下のサンプルコードで確認できます。

using System;
class Program
{
    static void Main()
    {
        string emptyString = ""; // 空文字列
        string nullString = null; // null
        
        Console.WriteLine(emptyString.ToUpper()); // 空文字列の大文字変換
        // Console.WriteLine(nullString.ToUpper()); // これは例外を発生させる
        
        // 上記の行をコメントアウトして実行すること
    }
}

特殊文字や数字を含む文字列の変換

ToUpperメソッドは、特殊文字や数字を含む文字列に対しても大文字変換を行いますが、アルファベット以外の文字はそのまま保持されます。

以下の例では、特殊文字や数字を含む文字列を大文字に変換しています。

using System;
class Program
{
    static void Main()
    {
        string mixedString = "abc123!@#"; // 特殊文字と数字を含む文字列
        string upperCaseMixed = mixedString.ToUpper(); // 大文字に変換
        
        Console.WriteLine(upperCaseMixed); // 結果を表示
    }
}
ABC123!@#

String.ToUpperメソッドのカルチャ依存性

CultureInfoを使った大文字変換

String.ToUpperメソッドは、デフォルトでは実行環境のカルチャに基づいて大文字変換を行いますが、CultureInfoクラスを使用することで特定のカルチャを指定することができます。

以下のサンプルコードでは、CultureInfoを使って大文字変換を行っています。

using System;
using System.Globalization;
class Program
{
    static void Main()
    {
        string original = "i̇stanbul"; // 特殊な大文字の例
        CultureInfo turkishCulture = new CultureInfo("tr-TR"); // トルコのカルチャ
        
        string upperCaseTurkish = original.ToUpper(turkishCulture); // トルコカルチャで大文字に変換
        
        Console.WriteLine(upperCaseTurkish); // 結果を表示
    }
}
İSTANBUL

CultureInfo.InvariantCultureの使用例

CultureInfo.InvariantCultureを使用すると、カルチャに依存しない大文字変換が可能です。

これは、特定のカルチャに依存しない処理が必要な場合に便利です。

以下の例では、InvariantCultureを使って大文字変換を行っています。

using System;
using System.Globalization;
class Program
{
    static void Main()
    {
        string original = "abc"; // 通常の文字列
        
        string upperCaseInvariant = original.ToUpper(CultureInfo.InvariantCulture); // カルチャに依存しない大文字変換
        
        Console.WriteLine(upperCaseInvariant); // 結果を表示
    }
}
ABC

カルチャ依存の変換が必要なケース

カルチャ依存の大文字変換が必要なケースは、特定の言語や地域における文字の大文字化のルールに従う必要がある場合です。

例えば、トルコ語では、通常の i が大文字になると「İ」になります。

このような場合、適切なカルチャを指定することが重要です。

  • トルコ語の i →「İ」
  • ドイツ語の「ß」→ SS

カルチャ依存の変換が不要なケース

カルチャ依存の変換が不要なケースは、一般的な英語の文字列や、特定のカルチャに依存しない処理を行う場合です。

例えば、英語のアルファベットはどのカルチャでも同じ大文字に変換されるため、CultureInfo.InvariantCultureを使用することが適しています。

  • 英語の helloHELLO
  • 数字や記号を含む文字列の変換

このような場合、カルチャに依存しない変換を行うことで、意図しない結果を避けることができます。

String.ToUpperメソッドの応用例

ユーザー入力の正規化

ユーザーからの入力を受け取る際、入力内容の大文字小文字を統一することで、データの整合性を保つことができます。

String.ToUpperメソッドを使用して、ユーザーの入力を大文字に変換し、正規化する例を以下に示します。

using System;
class Program
{
    static void Main()
    {
        Console.Write("ユーザー名を入力してください: ");
        string userInput = Console.ReadLine(); // ユーザー入力を取得
        string normalizedInput = userInput.ToUpper(); // 大文字に変換
        
        Console.WriteLine($"正規化されたユーザー名: {normalizedInput}"); // 結果を表示
    }
}
ユーザー名を入力してください: exampleUser
正規化されたユーザー名: EXAMPLEUSER

ファイル名やパスの大文字変換

ファイル名やパスを扱う際に、大文字小文字を統一することは、特にファイルシステムが大文字小文字を区別する場合に重要です。

以下の例では、ファイル名を大文字に変換しています。

using System;
class Program
{
    static void Main()
    {
        string fileName = "myDocument.txt"; // ファイル名
        string upperCaseFileName = fileName.ToUpper(); // 大文字に変換
        
        Console.WriteLine($"大文字に変換されたファイル名: {upperCaseFileName}"); // 結果を表示
    }
}
大文字に変換されたファイル名: MYDOCUMENT.TXT

データベース検索での大文字小文字の区別を無視した比較

データベースからデータを検索する際、大文字小文字を区別せずに比較することが求められる場合があります。

ToUpperメソッドを使用して、検索条件を大文字に変換し、比較を行う例を示します。

using System;
class Program
{
    static void Main()
    {
        string searchTerm = "example"; // 検索条件
        string databaseEntry = "Example"; // データベースのエントリ
        
        // 大文字小文字を無視した比較
        bool isMatch = searchTerm.ToUpper() == databaseEntry.ToUpper();
        
        Console.WriteLine($"検索条件とデータベースのエントリは一致しますか?: {isMatch}"); // 結果を表示
    }
}
検索条件とデータベースのエントリは一致しますか?: True

大文字変換を使った文字列の比較

文字列の比較を行う際に、ToUpperメソッドを使用して両方の文字列を大文字に変換することで、大文字小文字を無視した比較が可能です。

以下の例では、2つの文字列を比較しています。

using System;
class Program
{
    static void Main()
    {
        string str1 = "Hello World"; // 文字列1
        string str2 = "hello world"; // 文字列2
        
        // 大文字小文字を無視した比較
        bool areEqual = str1.ToUpper() == str2.ToUpper();
        
        Console.WriteLine($"2つの文字列は一致しますか?: {areEqual}"); // 結果を表示
    }
}
2つの文字列は一致しますか?: True

String.ToUpperメソッドとString.ToLowerメソッドの違い

ToUpperとToLowerの基本的な違い

String.ToUpperメソッドString.ToLowerメソッドは、どちらも文字列の変換に使用されますが、変換の方向が異なります。

ToUpperは文字列をすべて大文字に変換し、ToLowerはすべて小文字に変換します。

以下のサンプルコードでその違いを示します。

using System;
class Program
{
    static void Main()
    {
        string original = "Hello World"; // 元の文字列
        
        string upperCase = original.ToUpper(); // 大文字に変換
        string lowerCase = original.ToLower(); // 小文字に変換
        
        Console.WriteLine($"大文字: {upperCase}"); // 結果を表示
        Console.WriteLine($"小文字: {lowerCase}"); // 結果を表示
    }
}
大文字: HELLO WORLD
小文字: hello world

大文字変換と小文字変換の使い分け

大文字変換と小文字変換は、用途に応じて使い分けることが重要です。

例えば、ユーザー名やパスワードの正規化には大文字変換が適している場合があります。

一方、テキストの表示やデータの整形には小文字変換が適していることがあります。

以下の例では、ユーザー名の正規化とテキストの表示を示します。

using System;
class Program
{
    static void Main()
    {
        string userName = "UserName"; // ユーザー名
        string displayText = "WELCOME TO THE SYSTEM"; // 表示用テキスト
        
        // ユーザー名を大文字に変換
        string normalizedUserName = userName.ToUpper();
        
        // 表示用テキストを小文字に変換
        string formattedText = displayText.ToLower();
        
        Console.WriteLine($"正規化されたユーザー名: {normalizedUserName}"); // 結果を表示
        Console.WriteLine($"フォーマットされたテキスト: {formattedText}"); // 結果を表示
    }
}
正規化されたユーザー名: USERNAME
フォーマットされたテキスト: welcome to the system

大文字小文字を区別しない比較の実装

大文字小文字を区別しない比較を行う場合、ToUpperまたはToLowerメソッドを使用して、両方の文字列を同じケースに変換してから比較します。

以下の例では、2つの文字列を比較する方法を示します。

using System;
class Program
{
    static void Main()
    {
        string str1 = "CSharp"; // 文字列1
        string str2 = "csharp"; // 文字列2
        
        // 大文字小文字を無視した比較
        bool areEqual = str1.ToLower() == str2.ToLower();
        
        Console.WriteLine($"2つの文字列は一致しますか?: {areEqual}"); // 結果を表示
    }
}
2つの文字列は一致しますか?: True

このように、ToUpperToLowerメソッドを使い分けることで、文字列の変換や比較を柔軟に行うことができます。

String.ToUpperメソッドのパフォーマンス

大量の文字列変換時のパフォーマンス

String.ToUpperメソッドは、文字列を大文字に変換する際に新しい文字列を生成します。

このため、大量の文字列を変換する場合、パフォーマンスに影響を与える可能性があります。

特に、ループ内で何度もToUpperを呼び出すと、メモリの使用量が増加し、処理速度が低下することがあります。

以下のサンプルコードでは、大量の文字列を変換する際のパフォーマンスを示します。

using System;
using System.Diagnostics;
class Program
{
    static void Main()
    {
        string[] strings = new string[100000]; // 10万の文字列配列
        for (int i = 0; i < strings.Length; i++)
        {
            strings[i] = "example"; // すべて同じ文字列
        }
        Stopwatch stopwatch = Stopwatch.StartNew(); // 処理時間計測開始
        for (int i = 0; i < strings.Length; i++)
        {
            strings[i] = strings[i].ToUpper(); // 大文字に変換
        }
        stopwatch.Stop(); // 処理時間計測終了
        Console.WriteLine($"処理時間: {stopwatch.ElapsedMilliseconds} ms"); // 結果を表示
    }
}
処理時間: 50 ms

StringBuilderとの併用によるパフォーマンス向上

大量の文字列を操作する場合、StringBuilderを使用することでパフォーマンスを向上させることができます。

StringBuilderは可変長の文字列を扱うため、文字列の連結や変換を効率的に行うことができます。

以下の例では、StringBuilderを使用して文字列を大文字に変換しています。

using System;
using System.Diagnostics;
using System.Text;
class Program
{
    static void Main()
    {
        StringBuilder sb = new StringBuilder(); // StringBuilderのインスタンスを作成
        for (int i = 0; i < 100000; i++)
        {
            sb.Append("example"); // 文字列を追加
        }
        Stopwatch stopwatch = Stopwatch.StartNew(); // 処理時間計測開始
        string upperCaseString = sb.ToString().ToUpper(); // すべて大文字に変換
        stopwatch.Stop(); // 処理時間計測終了
        Console.WriteLine($"処理時間: {stopwatch.ElapsedMilliseconds} ms"); // 結果を表示
    }
}
処理時間: 30 ms

メモリ効率を考慮した文字列操作

String.ToUpperメソッドを使用する際は、メモリ効率を考慮することも重要です。

特に、大量の文字列を扱う場合、不要な文字列の生成を避けるために、必要な場合にのみ変換を行うように心がけるべきです。

また、StringBuilderを使用することで、メモリの再割り当てを減らし、効率的に文字列を操作することができます。

以下の例では、条件に応じてのみ大文字変換を行う方法を示します。

using System;
using System.Text;
class Program
{
    static void Main()
    {
        string[] strings = { "example", "test", "sample" }; // 文字列配列
        StringBuilder sb = new StringBuilder(); // StringBuilderのインスタンスを作成
        foreach (var str in strings)
        {
            if (str.Length > 5) // 条件に応じて大文字変換
            {
                sb.Append(str.ToUpper());
            }
            else
            {
                sb.Append(str);
            }
        }
        Console.WriteLine(sb.ToString()); // 結果を表示
    }
}
EXAMPLEtestSAMPLE

このように、String.ToUpperメソッドを使用する際は、パフォーマンスやメモリ効率を考慮し、適切な方法で文字列を操作することが重要です。

よくある質問

String.ToUpperメソッドは元の文字列を変更しますか?

String.ToUpperメソッドは、元の文字列を変更しません。

C#の文字列は不変(immutable)であるため、ToUpperメソッドを呼び出すと、新しい大文字の文字列が生成され、元の文字列はそのまま保持されます。

したがって、元の文字列を保持したい場合は、変換後の新しい文字列を別の変数に格納する必要があります。

String.ToUpperメソッドは数字や記号に影響を与えますか?

String.ToUpperメソッドは、アルファベットの文字に対してのみ大文字変換を行います。

数字や記号はそのまま保持され、影響を受けることはありません。

例えば、”abc123!@#”という文字列をToUpperメソッドで変換すると、”ABC123!@#”のように、アルファベットのみが大文字に変換されます。

String.ToUpperメソッドはどのカルチャをデフォルトで使用しますか?

String.ToUpperメソッドは、デフォルトでは実行環境のカルチャ(通常はシステムのカルチャ)を使用して大文字変換を行います。

これにより、特定の言語や地域における文字の大文字化のルールに従った変換が行われます。

ただし、特定のカルチャを指定したい場合は、CultureInfoクラスを使用して明示的にカルチャを指定することができます。

まとめ

この記事では、C#のString.ToUpperメソッドの基本的な使い方や応用例、パフォーマンスに関する情報を詳しく解説しました。

大文字変換の際のカルチャ依存性や、ToUpperメソッドToLowerメソッドの違いについても触れ、実際のプログラミングにおける活用方法を具体的に示しました。

これを機に、文字列操作の際にはToUpperメソッドを効果的に活用し、より効率的なプログラムを作成してみてください。

  • URLをコピーしました!
目次から探す