【问题标题】:Use JavaScript to count words in a string, WITHOUT using a regex使用 JavaScript 计算字符串中的单词,而不使用正则表达式
【发布时间】:2016-11-02 16:46:30
【问题描述】:

已经有很多关于如何在 JavaScript 中计算字符串中的单词数的帖子,我只是想澄清一下,我已经看过这些了。

Counting words in string

Count number of words in string using JavaScript

作为一个非常新的程序员,我想在不使用任何正则表达式的情况下执行此功能。我对正则表达式一无所知,所以我想使用常规代码,即使它不是现实世界中最有效的方式,为了学习。

我在其他地方找不到我的问题的任何答案,所以我想在我默认只使用正则表达式之前先在这里提问。

    function countWords(str) {
      return str.split(/\s+/).length;
    }

我的总体目标是找到字符串中最短的单词。

【问题讨论】:

  • stackoverflow.com/questions/18679576/… 这是您的第一个链接,接受的答案没有正则表达式。那不行吗?
  • 如何手动计算字符串中的单词?您可以将手指放在字符串的开头,查看您想要的单词是否在那里,然后将手指移动到字符串中的下一个字符。重复直到你的手指在弦的末端。现在这样做,但在 JS 代码中。
  • 可以只使用String.split() 将字符串按空格分割成一个数组。另外,您对 Regex 的反感是什么?这将是学习编程时学习曲线的一部分
  • 在我看来,提供的链接有足够的材料来回答您的问题。如果没有,在阅读它们之后,您应该意识到您需要添加适合您的单词边界。
  • My overall goal is to find the shortest word in the string. 这是一个完全不同的问题,不是吗?

标签: javascript


【解决方案1】:

似乎问题发生了一些变化,但您帖子中的第一个链接已关闭。修改为忽略双空格:

function WordCount(str) {
   return str
     .split(' ')
     .filter(function(n) { return n != '' })
     .length;
}

console.log(WordCount("hello      world")); // returns 2

那里没有正则表达式 - 只需将字符串分解为空格上的数组,删除空项(双空格)并计算数组中的项数。

【讨论】:

  • @MoteZart 如果您有多个空格(如此烦人地修剪它们),那么您仍然会在空格上拆分,然后删除所有生成的空字符串
  • 我试过了,但是当我输入空格时,它似乎添加了数字。所以“hello____ world”为 WordCount 返回 4。也许我想要一个更“纯粹”的答案是不合时宜的。如果这个唯一的非正则表达式答案就是全部,我会除了它,但我认为可能会有一个更复杂的答案来处理这个间距问题,所以我可以学习手动管理这个问题。编辑:为空格加下划线
  • @MoteZart "hello____world".split(" ") -> ["hello", "", "", "", "world"] -> 删除空字符串 -> ["hello", "world"] -> 计数现在是 2
  • @viaz 这意味着我需要查看 split 因为我在这里看到除了您的解释之外,我不知道如何将类型字符串转换为数组。我被定向到 MDN 以获取更多信息。不过你的解释很清楚。
  • @MoteZart 我已经编辑以解决双空格问题,但从那时起问题似乎略有变化!这将清除双空格。
【解决方案2】:

所以,这是您的新问题的答案:

My overall goal is to find the shortest word in the string.

它像以前一样拆分字符串,将数组从短单词到长单词排序并返回第一个条目/最短单词:

function WordCount(str) { 
    var words = str.split(" ");

    var sortedWords = words.sort(function(a,b) {
        if(a.length<b.length) return -1;
        else if(a.length>b.length) return 1;
        else return 0;
    });
   return sortedWords[0];
}

console.log(WordCount("hello to the world"));

【讨论】:

  • 在上述代码的第 2 行添加 console.log('word count = ' + str.split(' ').filter(function(n) { return n != '' }).length); 给出句子中的单词数以及最短单词数。
猜你喜欢
  • 1970-01-01
  • 2017-03-07
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 2019-01-20
相关资源
最近更新 更多