C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のString.IndexOf()メソッドとは?使い方とサンプルコード解説


C#のString.IndexOf()メソッドは、指定したUnicode文字または文字列が、現在の文字列インスタンス内で最初に出現する位置を、0から始まるインデックス(ゼロベース)で取得するために使用されます。対象の文字列が見つからなかった場合には -1 を返します。

構文

基本的な構文は以下の通りです。

public int IndexOf (string val);

ここで、val は検索対象となる文字列です。

戻り値

  • 見つかった場合:最初の出現位置(0から始まるインデックス)
  • 見つからなかった場合:-1

なお、IndexOf()には引数に開始位置や検索範囲を指定できるオーバーロードも用意されており、柔軟な文字列検索が可能です。

例1:文字列中の文字位置を検索する

まずは基本的な使用例を見てみましょう。

using System;
public class Demo {
    public static void Main(String[] args) {
        string str1 = "Jacob";
        string str2 = "John";
        Console.WriteLine("String 1 = "+str1);
        Console.WriteLine("HashCode of String 1 = "+str1.GetHashCode());
        Console.WriteLine("Index of character 'o' is str1 = " + str1.IndexOf("o"));
        Console.WriteLine("\nString 2 = "+str2);
        Console.WriteLine("HashCode of String 2 = "+str2.GetHashCode());
        Console.WriteLine("Index of character 'o' is str2 =" + str2.IndexOf("o"));
        bool res = str1.Contains(str2);
        if (res)
            Console.WriteLine("Found!");
        else
            Console.WriteLine("Not found!");
    }
}

出力結果

このコードを実行すると、次のような結果が出力されます。

String 1 = Jacob
HashCode of String 1 = -790718923
Index of character 'o' is str1 = 3
String 2 = John
HashCode of String 2 = -1505962600
Index of character 'o' is str2 = 1
Not found!

「Jacob」の場合、小文字の「o」は4番目の文字なのでインデックスは 3 となります。「John」の場合は2番目の文字なので 1 です。また、「Jacob」の中に「John」は含まれていないため、Contains()の判定結果は「Not found!」となっています。

例2:大文字・小文字の違いによる検索結果

次に、大文字と小文字が異なるケースの例を見てみましょう。

using System;
public class Demo {
    public static void Main(String[] args) {
        string str1 = "Kevin";
        string str2 = "Evin";
        Console.WriteLine("String 1 = "+str1);
        Console.WriteLine("HashCode of String 1 = "+str1.GetHashCode());
        Console.WriteLine("Index of character 'k' in str1 = " + str1.IndexOf("k"));
        Console.WriteLine("\nString 2 = "+str2);
        Console.WriteLine("HashCode of String 2 = "+str2.GetHashCode());
        Console.WriteLine("Index of character 'k' in str2 =" + str2.IndexOf("k"));
        bool res = str1.Contains(str2);
        if (res)
            Console.WriteLine("Found!");
        else
            Console.WriteLine("Not found!");
    }
}

出力結果

実行すると、次の結果が得られます。

String 1 = Kevin
HashCode of String 1 = -768104063
Index of character 'k' in str1 = -1
String 2 = Evin
HashCode of String 2 = 1223510568
Index of character 'k' in str2 = -1
Not found!

「Kevin」には大文字の「K」しか含まれていないため、小文字の「k」を検索しても該当箇所がなく、結果は -1 になります。このように、IndexOf()は大文字と小文字を区別して検索を行う点に注意が必要です。大文字小文字を区別せずに検索したい場合は、あらかじめ ToLower() や ToUpper() などで文字列を揃えてから検索するとよいでしょう。


  1. C#のSingleOrDefault()メソッドの使い方をわかりやすく解説

    SingleOrDefault()メソッドとはC#のLINQに含まれるSingleOrDefault()メソッドは、シーケンスから単一の特定要素を返すメソッドです。大きな特徴は、要素がシーケンス内に存在しない場合でも例外をスローせず、その型のデフォルト値を返すという点にあります。たとえば参照型の場合は null、数値型の場合は 0 といったデフォルト値が返されるため、空のコレクションを安全に扱いたい場面で非常に便利です。Single()メソッドとの違い似た名前の Single() メソッドは、要素が存在しない場合や複数の要素が見つかった場合に例外(InvalidOperationExcepti

  2. 【C#】String.Join()メソッドで文字列配列を連結する方法

    String.Join()メソッドとはC#のString.Join()メソッドは、文字列配列のすべての要素を1つの文字列に連結するためのメソッドです。各要素の間には、引数で指定した区切り文字(セパレーター)が自動的に挿入されます。たとえば、区切り文字として改行コード「\n」を指定すれば、配列の各要素がそれぞれ別の行に配置された、複数行の文字列を簡単に作成できます。基本的な構文String.Join(\n, starray);第1引数: 要素間に挿入する区切り文字第2引数: 連結対象の文字列配列戻り値: 連結された1つの文字列サンプルコード以下は、5つの文字列要素を持つ配列を改行コードで連結し、