JavaScript递归代码无法统计文本文件行数、单词数及字符数求助
递归统计文本行数、单词数、字符数的问题排查与修复
你的代码存在几处关键问题,导致程序无法正常运行,以下是问题分析和修复方案:
问题1:换行符语法错误+无限递归
countLines函数里的text.indexOf(" ")是语法错误,换行符需用"\n"表示。此外,如果文本最后一行没有换行符,indexOf("\n")会返回-1,此时text.substring(-1 + 1)等价于text.substring(0),会导致递归调用永远处理同一个字符串,陷入无限递归。
问题2:单词统计的无限递归+边界错误
countWords函数同样存在无限递归问题:当文本中没有空格时,indexOf(" ")返回-1,递归调用会重复处理原字符串。同时,开头/结尾的空格、连续空格会导致单词数统计错误(比如开头空格会被误算成一个单词)。
修复后的完整代码
var fs = require("fs"); var text = fs.readFileSync("text.txt", "utf8"); function countLines(text) { if (text === "") { return 0; } const lineBreakIndex = text.indexOf("\n"); // 找不到换行符,说明是最后一行 if (lineBreakIndex === -1) { return 1; } return 1 + countLines(text.substring(lineBreakIndex + 1)); } function countWords(text) { // 先去除两端空格,避免边界错误 const trimmedText = text.trim(); if (trimmedText === "") { return 0; } const spaceIndex = trimmedText.indexOf(" "); // 找不到空格,说明只有一个单词 if (spaceIndex === -1) { return 1; } // 递归处理空格后的部分,再次trim避免连续空格 return 1 + countWords(trimmedText.substring(spaceIndex + 1).trim()); } function countCharacters(text) { if (text === "") { return 0; } else { return 1 + countCharacters(text.substring(1)); } } var lineCount = countLines(text); var wordCount = countWords(text); var characterCount = countCharacters(text); console.log( `There are ${lineCount} lines, ${wordCount} words, and ${characterCount} characters in the file.` );
测试结果
针对你的text.txt内容:
I was running to the zoo.
运行后会输出:There are 1 lines, 6 words, and 26 characters in the file.
(注:26字符包含了结尾的换行符,如果你的文本没有换行符,字符数会是25)
内容的提问来源于stack exchange,提问作者iamundertaker
相关产品推荐
相关产品推荐

