如何拆分字符串:将x作为分隔符、a保留为单个输出元素
解决方案
你可以直接用正则匹配实现需求,一行代码就能完成,不需要手动处理数组扩容,也不用自己写循环:
using System.Text.RegularExpressions; // 单行实现 string[] result = Regex.Matches(input_string, @"a|[^ax]+") .Cast<Match>() .Select(m => m.Value) .ToArray();
方案说明
- 正则模式
a|[^ax]+会匹配两类内容:单个字符a,或者连续的非a非x字符,刚好完全匹配你的拆分规则 - 不需要手动处理
x分隔符的逻辑,所有x会自动被过滤掉,不会出现在结果中 - 底层由正则引擎实现内存分配,不需要你手动处理数组扩容的性能问题
关于补充的Split保留分隔符问题
原生string.Split没有提供保留指定分隔符的内置实现,但可以通过正则的Regex.Split配合环视规则实现类似效果,不过针对你的当前场景,直接用Regex.Matches是更简洁高效的方案。
如果确实需要处理MB级别以上的超大规模字符串、对性能有极致要求,可以预遍历一次字符串统计结果项数,再一次性分配数组填充,但常规场景下上述正则方案完全够用。
内容的提问来源于stack exchange,提问作者Dominique
相关产品推荐
相关产品推荐

