Javaにおける文字列の検索方法とは?Javaのメソッドをご紹介
- SE
- 文字列の検索はJavaでもできるのでしょうか?
- PM
- とても素朴な疑問ですが、できますよ。では詳しくみていきましょう。
目次
文字列の検索を行うJavaのメソッド
文字列の中に特定の単語が含まれているかを調べたいことがあります。この記事では、JavaのStringクラスの以下のメソッドを使い、文字列中の部分文字列を検索する方法を説明します。
・contains
・indexOf
・lastIndexOf
文字列を含んでいるかを調べるcontains
文字列中に、指定された部分文字列を含んでいるかを調べたいときには、containsを使います。ここからは、containsの使い方を解説していきます。
containsの使い方
JavaのStringクラスのメソッドcontainsは次の形式です。
・boolean contains(CharSequence s)
引数の文字列を含んでいる場合に、trueを返す
ここで引数の型はCharSequenceとなっていますが、Javaの仕様では、StringはCharSequenceインタフェースを実装しているクラスなので、引数にString型の変数を渡してよいです。
containsを使ったコード例
containsを用いたJavaプログラムの例を示します。このプログラムでは、コマンドライン引数で調べたい文字列を指定できます。指定がないときは、デフォルト指定のappleboycatdogという文字列内にboyが部分文字列として含まれているかを調べます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public class StrContains {
public static void main(String[] args) {
// 検索処理の対象文字列
String string = ""appleboycatdog"";
// 検索したい文字列
String pattern = ""boy"";
// コマンドラインに文字列指定がある場合
if (args.length > 0) pattern = args[0];
if (args.length > 1) string = args[1];
// 検索処理対象の文字列を出力
System.out.println(string);
// patternが含まれているか調べる
if (string.contains(pattern)) {
System.out.println(pattern + "" が含まれている"");
} else {
System.out.println(pattern + "" が含まれていない"");
}
}
}
|
containsを使ったプログラムの実行例
上のJavaプログラムの実行結果の例を示します。他にも好きな文字列をコマンドラインで指定して、色々なパターンを試してみて下さい。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
$ java strContains
appleboycatdog
boy が含まれている
$ java strContains cat
appleboycatdog
cat が含まれている
$ java strContains bat
appleboycatdog
bat が含まれていない
$ java strContains bat applybatcat
applybatcat
bat が含まれている
|
文字列内の位置もわかるindexOfとlastIndexOf
文字列内に含まれる部分文字列を検索する際、文字列内の位置も知りたい場合には、indexOfやlastIndexOfを使用します。
indexOfとlastIndexOfの使い方
JavaのStringクラスのメソッドindexOfとlastIndexOfは次の形式です。いずれの形式でも、部分文字列が出現しない場合は-1を返します。
・int indexOf(String str)
指定された部分文字列が最初に出現する位置のインデックスを返す
・int indexOf(String str, int fromIndex)
fromIndex以降で、指定された部分文字列が最初に出現する位置のインデックスを返す
・int lastIndexOf(String str)
指定された部分文字列が最後に出現する位置のインデックスを返す
・int lastIndexOf(String str, int fromIndex)
指定された部分文字列が最後に出現する位置のインデックスを返す(fromIndexから先頭方向に検索)
indexOfとlastIndexOfでは文字列の検索方向が異なるので、探したい文字列が複数回出現する場合には、異なるインデックスが得られます。
indexOf/lastIndexOfを使ったコード例
indexOf、lastIndexOfを用いたJavaプログラムの例を示します。前のプログラムと同様に、コマンドライン引数で調べたい文字列を指定できます。先頭から、最後から、またインデックス10以降の文字列で先頭または最後からの検索を行います。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
public class StrIndex {
public static void main(String[] args) {
// 検索処理対象string=args[1]、
// 検索パターンpattern=args[0]を設定
// …(コード省略)…
int index; // patternの出現位置
// indexOf:最初の出現位置
index = string.indexOf(pattern);
if (index == -1) {
System.out.println(pattern + "" が含まれていない"");
} else {
System.out.println(pattern + "" が含まれている index: "" + index);
}
// indexOf:最初の出現位置(10以降)
index = string.indexOf(pattern, 10);
if (index == -1) {
System.out.println(pattern + "" が含まれていない(10-)"");
} else {
System.out.println(pattern + "" が含まれている(10-) index: "" + index);
}
// lastIndexOf:最後の出現位置
index = string.lastIndexOf(pattern);
if (index == -1) {
System.out.println(pattern + "" が含まれていない"");
} else {
System.out.println(pattern + "" が含まれている lastIndex: "" + index);
}
// lastIndexOf:最後の出現位置(10以前)
index = string.lastIndexOf(pattern, 10);
if (index == -1) {
System.out.println(pattern + "" が含まれていない(-10)"");
} else {
System.out.println(pattern + "" が含まれている(-10) lastIndex: "" + index);
}
}
}
|
indexOf/lastIndexOfを使ったプログラムの実行例
上のJavaプログラムの実行結果の例を示します。他にも様々な文字列で試してみて下さい。またインデックスも変えて確認してみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
$ java StrIndex cat appleboycatdogcatboyapple
appleboycatdogcatboyapple
cat が含まれている index: 8
cat が含まれている(10-) index: 14
cat が含まれている lastIndex: 14
cat が含まれている(-10) lastIndex: 8
$ java StrIndex bat applebatcatdogcatboyapple
applebatcatdogcatboyapple
bat が含まれている index: 5
bat が含まれていない(10-)
bat が含まれている lastIndex: 5
bat が含まれている(-10) lastIndex: 5
|
- SE
- 様々な方法で検索することが可能なんですね。
- PM
- 頻繁に使われるのはStringですね。実際に試して理解を深めていきましょう。
文字列の検索方法を理解しよう
Javaで、文字列中に特定の部分文字列が含まれているかどうかを調べる方法として、Stringクラスのメソッドcontains、indexOf、lastIndexOfを使う方法を説明しました。StringはJavaプログラム内で頻繁に使われますので、どのような応用があるか考えてみてはいかがでしょうか。