JavaScript字符串单词计数异常求助:忽略空格统计失效
问题排查与解决
原代码的问题
- 错误的字符访问方式:在
for...of循环中,element是单个字符,不是完整字符串,使用element[indexcount + 1]或element[indexcount - 1]会得到undefined,完全不符合预期逻辑。 - 逻辑混乱的判断条件:原条件把空格、前后字符的判断混在一起,导致每遍历一个字符就可能触发计数,比如测试字符串
"Hello World"会错误输出11(每个字符都被计数)。 - 重复声明变量:循环内重复用
var声明words和indexcount,会导致变量作用域混乱,虽未引发致命错误,但属于不良编码习惯。
正确实现方式
方法一:正则分割法(简洁高效)
利用正则表达式匹配一个或多个空白字符分割字符串,再过滤掉分割后产生的空字符串(比如字符串首尾空格导致的空项),最后取数组长度就是单词数:
const mystring = "Hello World "; const wordCount = mystring.split(/\s+/).filter(word => word.length > 0).length; console.log(wordCount); // 输出2
方法二:遍历统计法(逻辑清晰)
遍历字符串,仅当当前字符不是空格,且是字符串第一个字符/前一个字符是空格时,判定为新单词的开始并计数:
let mystring = "Hello World "; let wordCount = 0; for (let i = 0; i < mystring.length; i++) { if (mystring[i] !== " " && (i === 0 || mystring[i-1] === " ")) { wordCount++; } } console.log(wordCount); // 输出2
内容的提问来源于stack exchange,提问作者4zac
相关产品推荐
相关产品推荐

