如何分割字符串并保留分隔符?含Split方法代码示例场景
如何在分割字符串时保留分隔符?
这个问题我做字符串处理时也碰到过,.NET自带的Split方法默认会丢弃分隔符,但我们可以通过几种方式实现保留分隔符的需求,针对你提到的普通场景和开头带+的情况,给你整理两个实用方案:
方案一:使用正则表达式Regex.Split
正则的零宽度断言可以完美解决这个问题,还能自动处理开头的特殊情况。
场景1:将分隔符附加到前一个元素末尾
如果你希望得到类似["A+", "B+", ..., "H"]的结果,可以用正向零宽度后行断言(?<=\+)——它会匹配+字符后面的位置,但不会消耗+本身,分割时就会把+留在前一个元素里:
using System; using System.Text.RegularExpressions; class Program { static void Main() { // 普通输入 string normalInput = "A+B+C+D+E+F+G+H"; string[] normalResult = Regex.Split(normalInput, @"(?<=\+)"); Console.WriteLine("普通输入结果:"); foreach (var item in normalResult) { Console.WriteLine(item); // 输出: A+、B+、C+、...、H } // 开头带+的输入 string leadingDelimiterInput = "+A+B+C"; string[] leadingResult = Regex.Split(leadingDelimiterInput, @"(?<=\+)"); Console.WriteLine("\n开头带+的输入结果:"); foreach (var item in leadingResult) { Console.WriteLine(item); // 输出: +、A+、B+、C } } }
场景2:将分隔符作为单独元素
如果你希望分隔符独立成一个元素(比如["A", "+", "B", "+", "C"]),可以把分隔符用括号包裹成捕获组(\+),Regex.Split会自动把捕获到的分隔符保留在结果数组中:
string input = "A+B+C"; string[] result = Regex.Split(input, @"(\+)"); // 结果:["A", "+", "B", "+", "C"]
方案二:手动遍历实现分割(无需正则)
如果你对正则不太熟悉,或者需要更灵活的自定义逻辑,可以手动遍历字符串实现分割:
using System; using System.Collections.Generic; class Program { static void Main() { string normalInput = "A+B+C+D+E+F+G+H"; string[] normalResult = SplitWithDelimiter(normalInput, '+'); Console.WriteLine("普通输入结果:"); foreach (var item in normalResult) { Console.WriteLine(item); } string leadingInput = "+A+B+C"; string[] leadingResult = SplitWithDelimiter(leadingInput, '+'); Console.WriteLine("\n开头带+的输入结果:"); foreach (var item in leadingResult) { Console.WriteLine(item); } } public static string[] SplitWithDelimiter(string input, char delimiter) { List<string> parts = new List<string>(); int startIndex = 0; for (int i = 0; i < input.Length; i++) { if (input[i] == delimiter) { // 截取从startIndex到当前位置(包含分隔符)的片段 parts.Add(input.Substring(startIndex, i - startIndex + 1)); startIndex = i + 1; } } // 添加最后一段未被分割的内容 if (startIndex < input.Length) { parts.Add(input.Substring(startIndex)); } return parts.ToArray(); } }
这个方法会自动处理开头就是分隔符的情况,比如输入"+A+B+C"时,第一个字符就会被识别为分隔符,单独作为第一个元素加入结果数组。
方案对比
- 正则方案:代码简洁,一行搞定,适合大多数常规场景,但需要理解正则断言的逻辑。
- 手动遍历方案:逻辑直观,便于根据需求修改(比如只保留特定位置的分隔符),适合复杂的自定义分割需求。
内容的提问来源于stack exchange,提问作者Asdar
相关产品推荐
相关产品推荐

