You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:30:59