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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:41:16