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

CodeWars哈希标签生成器:空字符串判断返回错误问题求助

解决CodeWars《The Hashtag Generator》挑战的问题

挑战详情

我正在解决CodeWars的代码挑战《The Hashtag Generator》,挑战规则如下:

  • 结果必须以哈希标签(#)开头
  • 所有单词首字母必须大写
  • 若最终结果长度超过140字符,返回false
  • 若输入为空,或处理后的结果为空字符串,返回false

示例

" Hello there thanks for trying my Kata"  =>  "#HelloThereThanksForTryingMyKata"
"    Hello     World   "                  =>  "#HelloWorld"
""                                        =>  false

我的代码

function generateHashtag (str) {
   if (str == "") {return false;}
   else
     {
      let text = str.trim();
      const myArray = text.split(" ");
      let mot ="";
      let finalStr = ""
      for(let i=0; i< myArray.length; i++)
        {
          mot = myArray[i];
          mot = mot.charAt(0).toUpperCase() + mot.slice(1);
          finalStr =finalStr + mot;
        }
      if(finalStr.length >140){return false;}
      else {return "#"+finalStr;}
    }
}

遇到的问题

预期空字符串返回false:期望返回false但得到了'#'

我已经加了空字符串检查,但不知道为什么会触发这个错误。


问题分析与修复

你的代码存在两个关键问题:

  1. 仅检查了完全空的输入:当输入是全空格字符串(比如" ")时,str == ""不成立,会进入else分支,但trim()后得到空字符串,最终生成#,违反了“结果为空则返回false”的规则。
  2. split分割多空格会产生空元素:比如输入"Hello World",split(" ")会得到["Hello", "", "", "World"],循环处理空元素时,会把空字符串拼接进去,虽然不影响最终结果,但如果输入全是空格,就会导致finalStr为空,返回#。

修正后的代码:

function generateHashtag(str) {
  // 先去除两端空格,判断处理后是否为空(覆盖空输入和全空格输入)
  const trimmedStr = str.trim();
  if (!trimmedStr) return false;

  // 分割单词并过滤空元素,再统一处理首字母大写
  const finalStr = trimmedStr
    .split(" ")
    .filter(word => word)
    .map(word => word.charAt(0).toUpperCase() + word.slice(1))
    .join("");

  // 检查长度是否超标
  if (finalStr.length > 140) return false;

  return "#" + finalStr;
}

修正说明

  • 先通过trim()处理输入,直接判断处理后的字符串是否为空,同时覆盖了空输入和全空格输入的情况。
  • 使用filter(word => word)过滤掉split(" ")产生的空元素,避免无效拼接。
  • 用map和join简化了首字母大写的逻辑,代码更简洁易读。
  • 最后严格检查长度,确保符合规则。

内容的提问来源于stack exchange,提问作者ABDELKEBIR ACHRAF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:27:16