C#按下划线分割字符串:截取指定前缀内容的问题求助
解决方案
你的代码问题在于,当用Split('_')分割字符串后,取countUnderScore-1索引的元素,实际上是拿到了分割后的倒数第二个部分(比如duplicate_config_dev_V2分割后是4个元素,索引2对应的是dev),所以才会得到不符合预期的结果。
要实现保留duplicate_config_dev的需求,有两种简单可靠的方法:
方法一:截取最后一个下划线之前的子串
直接找到字符串中最后一个下划线的位置,截取该位置之前的内容:
int lastUnderlinePos = input.LastIndexOf('_'); if (lastUnderlinePos != -1) { input = input.Substring(0, lastUnderlinePos); }
这个方法效率较高,不需要分割整个字符串,适合处理较长的文本。
方法二:分割后拼接前n-1个部分
如果需要更灵活的处理(比如后续版本格式变化),可以先分割字符串,再排除最后一个部分后重新拼接:
string[] segments = input.Split('_'); if (segments.Length > 1) { input = string.Join("_", segments.Take(segments.Length - 1)); }
这种方式可读性更强,也方便调整需要保留的部分数量。
两种方法都能将duplicate_config_dev_V2和duplicate_config_dev_V3正确转换为duplicate_config_dev。
内容的提问来源于stack exchange,提问作者Mr Perfect
相关产品推荐
相关产品推荐

