teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

勘違いしていたので回答内容を修正

2015/11/24 00:20

投稿

usk
usk

スコア397

answer CHANGED
@@ -1,18 +1,34 @@
1
+ (補足)いくつか勘違いしていたので回答内容を修正しました。。。
2
+
1
3
  まずは、indexOf の仕様を再度確認してみてください。
2
4
  http://www.ajaxtower.jp/js/string_class/index14.html
3
5
  → 第2引数は、文字列の検索開始位置を設定するものです。
4
6
 
5
7
  つまり、ループ処理は下記の結果を返しているはずです。
6
8
 
7
- 1回目:文字列「あいうえおあいあ」→ indexOf 結果「1、6、8
9
+ 1回目:検索対象文字列「あいうえおあいあ」→ indexOf 結果「1」
8
- 2回目:文字列「いうえおあいあ」 → indexOf 結果「6、8
10
+ 2回目:検索対象文字列「いうえおあいあ」 → indexOf 結果「6」
9
- 3回目:文字列「うえおあいあ」 → indexOf 結果「6、8
11
+ 3回目:検索対象文字列「うえおあいあ」  → indexOf 結果「6」
10
- ……
12
+ 4回目:検索対象文字列「えおあいあ」  → indexOf 結果「6」
13
+ 5回目:検索対象文字列「おあいあ」    → indexOf 結果「6」
14
+ 6回目:検索対象文字列「あいあ」    → indexOf 結果「6」
15
+ 7回目:検索対象文字列「いあ」     → indexOf 結果「8」
16
+ 8回目:検索対象文字列「あ」       → indexOf 結果「8」
11
17
 
12
- 単純に文字列から「検索対象文字」のインデックス抜き出したいなら、for 文を利用する必要はございせん
18
+ indexOf 利用て処理を行いたいなら、下記の形になり
13
19
 
20
+ ```Javascript
21
+ var inputString = prompt("文字を入力", "あいうえおあいあ");
22
+ var searchString = prompt("検索したい文字を入力", "あ");
14
- また、文字列を一文字ずつ解釈したいなら substr 関数で部分文字列を生成してください。
23
+ for(var i = 0; i < inputString.length; i++){
24
+ console.log(inputString.indexOf(searchString,i) + 1);
25
+ i = inputString.indexOf(searchString,i); // 見つかったindexまで開始位置を遷移
26
+ }
27
+ ```
15
28
 
29
+
30
+ もし、文字列を一文字ずつ解釈したいなら substr 関数で部分文字列を生成してください。
31
+
16
32
  例:Substr 関数利用例:
17
33
  ```Javascript
18
34
  var inputString = prompt("文字を入力", "あいうえおあいあ");