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 }
关键改动说明
- 倒序遍历处理指令:
从后往前遍历可以避免修改前面元素时导致的索引偏移问题,确保指令位置的定位准确。 - 精准定位待转换单词:
只转换指令前面的N个单词(从i-num到i-1),不会误处理指令本身,同时通过max函数确保起始索引不会小于0,避免数组越界。 - 移除指令单词:
识别到指令后将其标记为空字符串,最后通过过滤空字符串的方式彻底移除指令,保证输出中不包含任何修改指令。 - 健壮性优化:
增加了错误判断(比如无法解析N为整数时直接跳过),避免程序崩溃。
测试示例输入:"This is SO EXCITING (low, 2)",处理后输出为"This is so exciting",完全符合需求。
内容的提问来源于stack exchange,提问作者ali mahdi
相关产品推荐
相关产品推荐

