Swift实现:按指定最大长度(仅空格处拆分)将字符串拆分为子串数组
如何将字符串按规则拆分为子串数组?
这个需求我之前也碰到过,核心就是要保证不拆分单词,只在空格处截断,同时每个片段的长度不超过设定值对吧?我给你梳理下思路,再放两个常用编程语言的实现示例,你可以参考下:
核心逻辑步骤
- 先把原字符串按空格拆成独立的单词列表,这一步是为了绝对避免把一个完整的单词拆成两半。
- 遍历单词列表,逐步构建每个符合长度要求的子串:
- 维护一个临时列表存放当前正在构建的子串的单词,以及当前子串的总长度。
- 对于每个单词,计算如果把它加入当前子串(需要加空格的话还要算上空格长度)后的总长度。
- 如果总长度没超过限制,就把单词加入临时列表,更新当前长度;如果超过了,就把临时列表拼成字符串存入结果数组,然后把当前单词作为新的临时列表的起点。
- 遍历结束后,别忘了把最后一个未存入结果的临时子串也加进去。
代码示例
Python 实现
def split_string_by_length(s, max_length): words = s.split() result = [] current_words = [] current_len = 0 for word in words: # 计算加入当前单词所需的总长度:当前长度 + 空格(如果已有单词) + 单词长度 required_len = current_len + (1 if current_words else 0) + len(word) if required_len <= max_length: current_words.append(word) current_len = required_len else: # 保存当前构建好的子串 result.append(' '.join(current_words)) current_words = [word] current_len = len(word) # 处理最后一组单词 if current_words: result.append(' '.join(current_words)) return result # 测试你的示例输入 input_str = "The quick brown fox jumps over the lazy dog" print(split_string_by_length(input_str, 10)) # 输出: ['The quick', 'brown fox', 'jumps over', 'the lazy', 'dog']
JavaScript 实现
function splitStringByLength(str, maxLength) { const words = str.split(' '); const result = []; let currentWords = []; let currentLen = 0; for (const word of words) { const requiredLen = currentLen + (currentWords.length > 0 ? 1 : 0) + word.length; if (requiredLen <= maxLength) { currentWords.push(word); currentLen = requiredLen; } else { result.push(currentWords.join(' ')); currentWords = [word]; currentLen = word.length; } } // 加入最后一段 if (currentWords.length > 0) { result.push(currentWords.join(' ')); } return result; } // 测试示例 const inputStr = "The quick brown fox jumps over the lazy dog"; console.log(splitStringByLength(inputStr, 10)); // 输出: ["The quick","brown fox","jumps over","the lazy", "dog"]
边界情况说明
如果遇到单个单词的长度超过设定的max_length,上面的代码会把这个单词单独作为一个数组元素(因为我们不能拆分单词)。如果你需要处理这种极端场景,可以在遍历前先检查每个单词的长度,比如抛出提示或者做特殊处理,但通常保留完整单词是符合需求的。
内容的提问来源于stack exchange,提问作者Trung Phan
相关产品推荐
相关产品推荐

