2024.11.26
文字列の中の文字/文字列を検索
文字/文字列の検索とは?
例えば、以下の文字列
ABCDEFGHIJK
の中に、
DEF
が有るかを探すと、
ABCDEFGHIJK
となります。
この例では、先頭から4番目の文字のところで一致してます。
ここでは、次に説明するString.indexOfメソッドを使って、文字/文字列の検索を行います。
このメソッドの戻り値は、先頭の文字のインデックスを0としているので、上の例の検索位置4から1を引いた3が検索した位置となります。
String.indexOfメソッド
IndexOfメソッド
int indexOf( int ch )
・文字列内で、指定された文字が最初に出現する位置のインデックスを返します。 パラメータ ch : 文字 戻り値 インデックスを戻します。文字が見つからない場合、-1を戻します。
int indexOf( int ch, int fromIndex )
・文字列内で、指定されたインデックスから検索を開始し、指定された文字が最初に出現する位置のインデックスを返します。 パラメータ ch : 文字 fromindex : 開始インデックス 戻り値 インデックスを戻します。文字が見つからない場合、-1を戻します。
int indexOf( String str )
・文字列内で、指定された文字列が最初に出現する位置のインデックスを返します。 パラメータ str : 文字列 戻り値 インデックスを戻します。文字が見つからない場合、-1を戻します。
int indexOf( String str, int fromIndex )
・文字列内で、指定されたインデックスから検索を開始し、指定された文字列が最初に出現する位置のインデックスを返します。 パラメータ str : 文字列 fromindex : 開始インデックス 戻り値 インデックスを戻します。文字が見つからない場合、-1を戻します。
文字列のインデックス
以下は、文字列とインデックスの具体例です。
Javaのプログラミングを学習する「 ゆるゆるプログラミング」
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
J | a | v | a | の | プ | ロ | グ | ラ | ミ |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
---|---|---|---|---|---|---|---|---|---|
ン | グ | を | 学 | 習 | す | る | 「 | ゆ | る |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
---|---|---|---|---|---|---|---|---|---|
ゆ | る | プ | ロ | グ | ラ | ミ | ン | グ | 」 |
上の例の文字列は30文字なので、0~29がインデックスの範囲になります、
Javaソースコード - 文字の位置を検索
StringIndexOf1.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025
public class StringIndexOf1 { public static void main(String[] args) { // Stringクラスに値を代入 String s = "Javaのプログラミングを学習する「ゆるゆるプログラミング」"; // インデックスを格納する変数 int index; // 文字「a」の位置を検索 index = s.indexOf( 'a' ); System.out.println("「a」の検索結果:" + index ); // 文字「プ」の位置を検索 index = s.indexOf( 'プ' ); System.out.println("「プ」の検索結果:" + index ); // 文字「学」の位置を検索 index = s.indexOf( '学' ); System.out.println("「学」の検索結果:" + index ); // 文字「A」の位置を検索 index = s.indexOf( 'A' ); System.out.println("「A」の検索結果:" + index ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis StringIndexOf1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac StringIndexOf1.java
実行
C:\talavax\javasample>java StringIndexOf1
実行結果
「a」の検索結果:1 「プ」の検索結果:5 「学」の検索結果:13 「A」の検索結果:-1
「a」はインデックス3にも有りますが、String.indexOfメソッドは先頭に近いインデックスを戻すので、検索結果は1になっています。
Javaソースコード - 文字列の位置を検索
StringIndexOf2.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025
public class StringIndexOf2 { public static void main(String[] args) { // Stringクラスに値を代入 String s = "Javaのプログラミングを学習する「ゆるゆるプログラミング」"; // インデックスを格納する変数 int index; // 文字列「Java」の位置を検索 index = s.indexOf( "Java" ); System.out.println("「Java」の検索結果:" + index ); // 文字列「プログラミング」の位置を検索 index = s.indexOf( "プログラミング" ); System.out.println("「プログラミング」の検索結果:" + index ); // 文字列「学習」の位置を検索 index = s.indexOf( "学習" ); System.out.println("「学習」の検索結果:" + index ); // 文字列「JAVA」の位置を検索 index = s.indexOf( "JAVA" ); System.out.println("「JAVA」の検索:" + index ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis StringIndexOf2.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac StringIndexOf2.java
実行
C:\talavax\javasample>java StringIndexOf2
実行結果
「Java」の検索結果:0 「プログラミング」の検索結果:5 「学習」の検索結果:13 「JAVA」の検索:-1
「プログラミング」はインデックス22にも有りますが、String.indexOfメソッドは先頭に近いインデックスを戻すので、検索結果は5になっています。
Javaソースコード - 開始インデックスを指定して文字の位置を検索
StringIndexOf3.java
001 002 003 004 005 006 007 008 009 010 011 012 013
public class StringIndexOf3 { public static void main(String[] args) { // Stringクラスに値を代入 String s = "Javaのプログラミングを学習する「ゆるゆるプログラミング」"; // インデックスを格納する変数 int index; // 文字「a」の位置をインデックス2から検索 index = s.indexOf( 'a', 2 ); System.out.println("「a」の検索結果:" + index ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis StringIndexOf3.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac StringIndexOf3.java
実行
C:\talavax\javasample>java StringIndexOf3
実行結果
「a」の検索結果:3
「a」はインデックス1にも有りますが、String.indexOfメソッドに開始インデックス2を指定しているので、検索結果は3になっています。
開始インデックスより小さいインデックスは、検索の対象外になります。
Javaソースコード - 開始インデックスを指定して文字列の位置を検索
StringIndexOf4.java
001 002 003 004 005 006 007 008 009 010 011 012 013
public class StringIndexOf4 { public static void main(String[] args) { // Stringクラスに値を代入 String s = "Javaのプログラミングを学習する「ゆるゆるプログラミング」"; // インデックスを格納する変数 int index; // 開始インデックス10を指定して、文字列「プログラミング」の位置を検索 index = s.indexOf( "プログラミング", 10 ); System.out.println("「プログラミング」の検索結果:" + index ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis StringIndexOf4.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac StringIndexOf4.java
実行
C:\talavax\javasample>java StringIndexOf4
実行結果
「プログラミング」の検索結果:22
「プログラミング」はインデックス5にも有りますが、String.indexOfメソッドに開始インデックス10を指定しているので、検索結果は22になっています。
開始インデックスより小さいインデックスは、検索の対象外になります。
以上です。