C# IndexOf 文字列の位置を取得する

C#の文字列の位置を取得するサンプルです。

目次

サンプル 前から検索する(引数1つ)
変数がnullの場合の対処法(?)
  前から検索する+開始位置を指定(引数2つ)
  後から検索する(引数1つ)
  後から検索する+開始位置を指定(引数2つ)

前から検索する(引数1つ)

public int IndexOf(string value);
  • 文字列の先頭から検索して引数に指定した文字列が出現した位置を返します。
  • 先頭の1文字目の位置は0です。
  • 該当の文字がなかったときは-1を返します。

IndexOfメソッドで前から検索するサンプルです。

using System;
class Test1
{
	static void Main()
	{
		string str1 = "abcabc";
		Console.WriteLine(str1.IndexOf("a"));// 0
		Console.WriteLine(str1.IndexOf("b"));// 1
		Console.WriteLine(str1.IndexOf("c"));// 2
		Console.WriteLine(str1.IndexOf("abc"));// 0
		Console.WriteLine(str1.IndexOf("z"));// -1

		string str2 = "あいうあいう";
		Console.WriteLine(str2.IndexOf("あ"));// 0
		Console.WriteLine(str2.IndexOf("い"));// 1
		Console.WriteLine(str2.IndexOf("う"));// 2
	}
}

7~10行目は、前から検索し引数の文字列が最初に見つかった位置を返しています。
11行目は、該当の文字がないので-1が返ります。
13行目は、変数に日本語の文字列を代入しています。

 

変数がnullの場合の対処法(?)

using System;

class Test1
{
	static void Main()
	{
		string str1 = null;
		//Console.WriteLine(str1.IndexOf("a")); // nullなのでエラー
		Console.WriteLine(str1?.IndexOf("a"));// エラーにならない
	}
}

7行目は値がnullです。
8行目はnullなのでエラーになります。
9行目は、変数の後に?があります。この場合出力なしでエラーになりません。

 

前から検索する+開始位置を指定(引数2つ)

public int IndexOf(string value, int 開始位置);

IndexOfメソッドで検索開始位置を指定するサンプルです。
2つ目の引数は、検索を始める位置です。

using System;
class Test1
{
  static void Main()
  {
    string str1 = "あいうあいう";
    Console.WriteLine(str1.IndexOf("あ",0));// 0
    Console.WriteLine(str1.IndexOf("あ",1));// 3
    Console.WriteLine(str1.IndexOf("あ",2));// 3
    Console.WriteLine(str1.IndexOf("あ",3));// 3
    Console.WriteLine(str1.IndexOf("あ",4));// -1
    Console.WriteLine(str1.IndexOf("あ",5));// -1
  }
}

7行目の2つめの引数は0で対象の文字列は(あいうあいう)です。位置の0が返ります。
8行目の2つめの引数は1で対象の文字列は(いうあいう)です。位置の3が返ります。
9行目の2つめの引数は2で対象の文字列は(うあいう)です。位置の3が返ります。
10行目の2つめの引数は3で対象の文字列は(あいう)です。位置の3が返ります。
11行目の2つめの引数は4で対象の文字列は(いう)です。文字(あ)はないので-1です。
12行目の2つめの引数は5で対象の文字列は(う)です。文字(あ)はないので-1です。

以下はMicrosoftのIndexOf メソッドのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/api/system.string.indexof?view=netframework-4.7.2

後から検索する(引数1つ)

public int LastIndexOf(string value);
  • 文字列の最後から検索して引数に指定した文字列が出現した位置を返します。
  • 先頭の1文字目の位置は0です
  • 該当の文字がなかったときは-1を返します。

LastIndexOfメソッドで後から検索するサンプルです。

using System;
class Test1
{
  static void Main()
  {
    string str1 = "abcabc";
    Console.WriteLine(str1.LastIndexOf ("a"));// 3
    Console.WriteLine(str1.LastIndexOf ("b"));// 4
    Console.WriteLine(str1.LastIndexOf ("c"));// 5
    Console.WriteLine(str1.LastIndexOf ("abc"));// 3
    Console.WriteLine(str1.LastIndexOf ("z"));// -1

    string str2 = "あいうあいう";
    Console.WriteLine(str2.LastIndexOf ("あ"));// 3
    Console.WriteLine(str2.LastIndexOf ("い"));// 4
    Console.WriteLine(str2.LastIndexOf ("う"));// 5
  }
}

7~10行目は、後ろから検索し引数の文字列が最初に見つかった位置を返しています。
11行目は、該当の文字がないので-1が返ります。
13行目は、変数に日本語の文字列を代入しています。

後から検索する+開始位置を指定(引数2つ)

public int LastIndexOf(string value, int 開始位置);

LastIndexOfメソッドで検索開始位置を指定するサンプルです。
2つ目の引数は、検索を始める位置です。

using System;
class Test1
{
  static void Main()
  {
    string str1 = "あいうあいう";
    Console.WriteLine(str1.LastIndexOf("あ",5));// 3
    Console.WriteLine(str1.LastIndexOf("あ",4));// 3
    Console.WriteLine(str1.LastIndexOf("あ",3));// 3
    Console.WriteLine(str1.LastIndexOf("あ",2));// 0
    Console.WriteLine(str1.LastIndexOf("あ",1));// 0
    Console.WriteLine(str1.LastIndexOf("あ",0));// 0
  }
}

7行目の引数は5で対象の文字列は(あいうあいう)です。位置の3が返ります。
8行目の引数は4で対象の文字列は(あいうあい)です。位置の3が返ります。
9行目の引数は3で対象の文字列は(あいうあ)です。位置の3が返ります。
10行目の引数は2で対象の文字列は(あいう)です。位置の0が返ります。
11行目の引数は1で対象の文字列は(あい)です。位置の0が返ります。
12行目の引数は0で対象の文字列は(あ)です。位置の0が返ります。

以下はMicrosoftのLastIndexOfメソッドのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/api/system.string.lastindexof?view=netframework-4.7.2

関連の記事

C# Split 文字列を分割して配列にする
C# 文字列の始まり/終わりを確認(StartsWith/EndsWith)
C# Replace 文字列を置き換えるサンプル
C# Substring 文字列を切り出す

△上に戻る