求建议:完善无内置函数的JavaScript字符串两端空格去除函数
解决字符串两端去空白(不使用内置函数)的问题
嘿,我看了你写的代码,问题出在两个关键地方:一是你的return a放在了for循环内部,导致第一次循环就直接返回结果,根本没遍历完整个字符串;二是你的逻辑只处理了左侧空白,完全没考虑右侧的空白字符。
咱们换个思路来搞定这个需求,核心是先找到字符串里第一个非空白字符的位置和最后一个非空白字符的位置,再把这两个位置之间的字符拼接起来就行。
具体实现步骤
- 定位左侧起始点:从字符串开头遍历,直到找到第一个不是空格(
)、换行(\n)、制表符(\t)的字符,记录这个索引为start。 - 定位右侧结束点:从字符串末尾往前遍历,直到找到最后一个非空白字符,记录这个索引为
end。 - 拼接有效内容:如果整个字符串都是空白(
start超过end),直接返回空字符串;否则从start到end逐个取出字符拼接成结果。
完整代码实现
function trimWithoutBuiltIn(str) { // 先处理空字符串的边界情况 if (str.length === 0) return ""; let start = 0; // 找到第一个非空白字符的索引 while (start < str.length) { const char = str.charAt(start); if (char !== ' ' && char !== '\n' && char !== '\t') { break; } start++; } let end = str.length - 1; // 找到最后一个非空白字符的索引 while (end >= 0) { const char = str.charAt(end); if (char !== ' ' && char !== '\n' && char !== '\t') { break; } end--; } // 全是空白字符的情况 if (start > end) return ""; // 拼接有效字符段 let result = ""; for (let i = start; i <= end; i++) { result += str.charAt(i); } return result; }
测试验证一下
console.log(trimWithoutBuiltIn(" Hello World! ")); // 输出"Hello World!" console.log(trimWithoutBuiltIn("\n\t Test \t\n")); // 输出"Test" console.log(trimWithoutBuiltIn(" ")); // 输出"" console.log(trimWithoutBuiltIn("NoSpacesHere")); // 输出"NoSpacesHere"
再复盘下你原来的代码问题
你原来的return a写在for循环里,导致循环刚执行一次就直接返回,连整个字符串都没遍历完,自然只能处理左侧开头的部分。就算把return移到循环外,逻辑上也没判断结尾的空白,所以咱们用首尾定位的思路,就能完美覆盖两端去空白的需求啦。
内容的提问来源于stack exchange,提问作者ABCDEFGHIJK
相关产品推荐
相关产品推荐

