如何使用文本框计算字符串中字符的出现次数?

时间:2015-01-15 18:25:46

标签: javascript count

我想计算letter中单个字符str表示的次数。

我已经尝试过这段代码,但我不断收到一个只有1的值。

var x = document.getElementById('txt1').value;
var y = document.getElementById('txt2').value;

var letter = x;
var str = y;    

for (var i = count = 0; i < str.length; count +++(letter === str[i++]));
count;

alert(i);

3 个答案:

答案 0 :(得分:1)

这样的事情? http://jsfiddle.net/swm53ran/96/

<input id="txt1" value="i"/>
<input id="txt2" value="This is my string"/>

<script type="text/javascript">
    var x =document.getElementById('txt1').value;
    var y = document.getElementById('txt2').value;

    var letter = x;
    var str = y;    
    var count = 0;

    var arrayX = str.split('');
    console.log(arrayX);    

    for (var i = 0; i < arrayX.length; i++) {
        if (arrayX[i] == letter) {
            count++;
        }   
    }

    alert(count);
</script>

答案 1 :(得分:1)

目前的问题是你的for循环的这一部分:count +++(letter === str[i++]),让我们来看看会发生什么:

  1. 如果letter === str[i],请添加一个(true)来计算。
  2. 将一个添加到i
  3. 计数递增
  4. 重复,除非i >= str.length
  5. 如您所见,count 总是增加至少1,有时2. i在每次重复时也会增加。

    你需要的是一个看似如下的for循环:

    for (var i = count = 0; i < str.length;  count += (str[i++] == letter));
    

    &#13;
    &#13;
    function getNumber(){
      var str = document.getElementById('txt1').value;
      var letter = document.getElementById('txt2').value;
    
      var count;
      for (var i = count = 0; i < str.length;  count += (str[i++] == letter));
    
      document.querySelector('p').innerText = count;
    }
    &#13;
    str: <input type="text" id="txt1"><br>
    letter: <input type="text" id="txt2"><br>
    <button onclick="getNumber()">Get Result</button><br>
    result: <p></p>
    &#13;
    &#13;
    &#13;

    Or full experience at this jsFiddle

    这里^^,count仅在letter == str[i]时递增,所以如果该条件为false,则count保持不变。


    或者,或许不那么简洁,你可以使用regular expression (regex)来达到同样的效果:

    var regex = new RegExp(letter, 'g');
    var count = (letter.length) ? str.match(regex).length : 0;
    

答案 2 :(得分:0)

这是使用正则表达式而不是拆分或编写循环的基本实现。

function go() {
  var letter = document.getElementById('txt1').value;
  var str = document.getElementById('txt2').value;
  var re = new RegExp(letter,"g");
  var count = (str.match(re || []).length);
  alert(count);
}
<label for="txt1">Character</label>
<input type="text" id="txt1" maxlength="1" />
<br/>
<label for="txt2">String</label>
<input type="text" id="txt2" />
<input type="button" value="go" onclick="go()" />