以下のサンプルは、StringBuilder sb に含まれる "レンジャー" という文字列を探します。
見つけた場合には、そのインデックスと、ヒットした "レンジャー" + 1文字 を表示します。
以下のサンプルで、
int fromIndex は、
- indexOf の検索開始位置
- substring の切り出し開始位置
の2つの役割を担っています。
//Sample07_01.java
/*sb の末尾が"レンジャー" の場合
StringIndexOutOfBoundsException を吐きます
ごめんね。*/
class Sample07_01{
public static void main(String[] args){
StringBuilder sb = new StringBuilder();
sb.append("キレンジャー黄瀬涼太\n");
sb.append("ミドレンジャー緑間真太郎\n");
sb.append("アオレンジャー青峰大輝\n");
sb.append("ムラサキレンジャー紫原敦\n");
sb.append("アカレンジャー赤司征十郎\n");
System.out.println(sb.toString());
int sbLength = sb.length();
System.out.println("sbLength: " + sbLength);
String searchWord = "レンジャー";
int length = searchWord.length();
int fromIndex = 0;
while((fromIndex = sb.indexOf(searchWord, fromIndex)) != -1){
System.out.print("index: " + fromIndex);
String hitWord = sb.substring(fromIndex, fromIndex + length +1);
System.out.println("\t hitWord: " + hitWord);
fromIndex++; //重複ヒットを避けるため、一文字進む
if(fromIndex>= sbLength - length)break;
}
}
}
ヒント
while文の条件式は、代入と評価を一文で行っています。
while(
(
fromIndex =
sb.
indexOf(searchWord, fromIndex))
!=
-1
)
- 代入 fromIndex = sb.indexOf(searchWord, fromIndex)
- 評価 fromIndex != -1