文字列中の特定の文字の数を数えるには?(JavaScript)

[上に] [前に] [次に]
アイモモ 2000/01/18(火) 20:50:29
文字列mjに特定の文字、例えば、「/」がいくつあるか数えるプログラムを作りました。
1回呼ぶだけなら正しい値を返してくれるのですが、
別の関数の中でforループで複数回呼ぶと間違った値を返してきます。
どこが悪いのかご指摘くださいませ。
よろしくお願いします。m(_ _)m

------------------------------------------
function get_depth(mj) {
  var sep = 0;
  for(var dep = 0; (sep = mj.indexOf("/")) != -1; dep++){
    var tmp = mj.slice(sep + 1, mj.length -1);
    mj = tmp;
  }
  return dep
}

Mugi [E-Mail] [HomePage] 2000/01/18(火) 21:57:04
これじゃ、正しい値返って来ませんよ。
mj.slice(sep + 1, mj.length -1)

mj.slice(sep + 1, mj.length)
> 別の関数の中で複数回呼ぶと間違った値を返してきます
これは原因がわかりません。
よかったら、その関数のソースを見せてください。

コガ [E-Mail] [HomePage] 2000/01/19(水) 01:05:02
こんばんわ、アイモモさん。
ちょっと作ってみたので、試しに使ってみてください。

//関数名:  stringCounter
//機能:    ある文字列の中に指定した文字列がいくつあるか調べる
//引数1:  調べたい文字列全体
//引数2:  数えたい文字列
//返値:     引数1内に引数2が含まれていた数
function stringCounter(str1,str2){
  var strlength=str2.length;
  var ans=0;
  var i=0;
  while((i=str1.indexOf(str2,i)) != -1){
    i+=strlength; //この行は目的によってはi++;を使う
    ans++;
  }
  return ans;
}

コガ [E-Mail] [HomePage] 2000/01/19(水) 01:21:50
ちなみに、アイモモさんの作った関数でも、正しく動くみたいだけど...
(すみません、コードの中身はあまり読んでいません)
おいらのパソコンでは再現できなかったよ。
正しく動かない原因は、他の場所にあるかもよ。

アイモモ 2000/01/19(水) 09:43:21
[[解決]]
Mugiさん、コガさんありがとうございます。
まずは自分で作成したスクリプトをMugiさんの指摘通り修正したら成功しました。
あと、コガさんの関数でも成功です!
使わせていただきます。
ありがとうございました。(^ゝ^)

[上に] [前に] [次に]