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

如何用Go实现超长文本按规则分割为最大500字符的字符串数组?

解决方案

方法一:直接按字符位置匹配分割规则(推荐)

这个方法完全贴合你提出的分割逻辑,无需提前拆分单词,直接操作原字符串更高效:

package main

import (
	"strings"
)

func SplitTextByLength(text string, maxLen int) []string {
	var result []string
	current := text

	for len(current) > maxLen {
		// 从maxLen位置开始往后查找第一个空格
		splitIdx := strings.Index(current[maxLen:], " ")
		if splitIdx == -1 {
			// 未找到空格,直接按maxLen长度分割
			result = append(result, current[:maxLen])
			current = current[maxLen:]
		} else {
			// 找到空格,分割点为maxLen + splitIdx
			splitPos := maxLen + splitIdx
			result = append(result, current[:splitPos])
			// 跳过空格,继续处理剩余文本
			current = current[splitPos+1:]
		}
	}

	// 处理最后一段不足maxLen的文本
	if current != "" {
		result = append(result, current)
	}

	return result
}

逻辑说明:

  • 循环处理剩余文本,每次判断是否超过最大长度
  • 从第maxLen位开始向后找空格,找到则在空格处分割,避免拆分单词
  • 若找不到空格,直接按maxLen硬分割
  • 最后将剩余的短文本加入结果数组

方法二:改进你的单词拼接思路

如果你坚持用拆分单词的方式,可修改代码维护结果数组,同时处理单个超长单词的情况:

package main

import (
	"regexp"
)

func SplitByWords(text string, maxLen int) []string {
	re := regexp.MustCompile(`\s+`)
	words := re.Split(text, -1)
	var result []string
	currentLine := ""

	for _, word := range words {
		var nextLen int
		if currentLine == "" {
			nextLen = len(word)
		} else {
			nextLen = len(currentLine) + 1 + len(word)
		}

		if nextLen <= maxLen {
			// 当前单词可加入行,拼接
			if currentLine == "" {
				currentLine = word
			} else {
				currentLine += " " + word
			}
		} else {
			// 当前行加入结果,开始新行
			result = append(result, currentLine)
			// 处理单个单词超过maxLen的情况
			if len(word) > maxLen {
				result = append(result, word)
				currentLine = ""
			} else {
				currentLine = word
			}
		}
	}

	// 加入最后一行
	if currentLine != "" {
		result = append(result, currentLine)
	}

	return result
}

注意点:

  • 这个方法会尽量把单词凑到不超过maxLen的行,但可能会比maxLen短(因为下一个单词加进去会超)
  • 需要单独处理单个单词长度超过maxLen的极端情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:15:33