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

Golang文本处理:移除输出中的修改指令问题求助

问题解决:移除Golang文本处理中的(low, N)指令并完成小写转换

你的代码核心问题有两个:一是会误将指令单词本身转为小写,二是处理完指令后没有将其从最终输出中移除。以下是修复后的代码及关键说明:

import (
	"strconv"
	"strings"
)

func LowModification(text string) string {
	words := strings.Fields(text)

	// 倒序遍历处理指令,避免索引偏移问题
	for i := len(words) - 1; i >= 0; i-- {
		word := words[i]
		parts := strings.Split(word, ",")
		if len(parts) != 2 {
			continue
		}

		instruction := strings.TrimSpace(parts[0])
		valuePart := strings.TrimSpace(parts[1])
		// 移除指令末尾的闭合括号
		valuePart = strings.TrimSuffix(valuePart, ")")

		if instruction == "(low" {
			num, err := strconv.Atoi(valuePart)
			if err != nil {
				continue
			}
			// 计算需要转换的起始位置,确保不越界
			startIdx := max(i - num, 0)
			// 将指令前的num个单词转为小写
			for j := startIdx; j < i; j++ {
				words[j] = strings.ToLower(words[j])
			}
			// 标记指令单词为待移除(设为空字符串)
			words[i] = ""
		}
	}

	// 过滤掉标记为空的指令单词
	var result []string
	for _, w := range words {
		if w != "" {
			result = append(result, w)
		}
	}

	return strings.Join(result, " ")
}

// 辅助函数:返回两个整数的最大值,避免索引越界
func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

关键改动说明

  1. 倒序遍历处理指令:
    从后往前遍历可以避免修改前面元素时导致的索引偏移问题,确保指令位置的定位准确。
  2. 精准定位待转换单词:
    只转换指令前面的N个单词(从i-num到i-1),不会误处理指令本身,同时通过max函数确保起始索引不会小于0,避免数组越界。
  3. 移除指令单词:
    识别到指令后将其标记为空字符串,最后通过过滤空字符串的方式彻底移除指令,保证输出中不包含任何修改指令。
  4. 健壮性优化:
    增加了错误判断(比如无法解析N为整数时直接跳过),避免程序崩溃。

测试示例输入:"This is SO EXCITING (low, 2)",处理后输出为"This is so exciting",完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:15:28