如何提取字符串中多次出现的括号内子串(非正则实现)
提取字符串中括号内的子串(无正则方案)
给定字符串数组:
public string[] test = {"(as) (bd) (ct)", "(sdf) te"};
需求是提取所有()之间的子串并存入数组,且不能使用正则表达式。之前使用Split('(', ')')的方式会把括号外的内容(比如示例中的"te")也包含进来,以下是可行的解决方案:
实现代码
using System; using System.Collections.Generic; using System.Text; class Program { public static List<string> ExtractBracketContent(string[] inputArray) { List<string> result = new List<string>(); bool insideBracket = false; StringBuilder currentContent = new StringBuilder(); foreach (string str in inputArray) { foreach (char c in str) { if (c == '(') { insideBracket = true; currentContent.Clear(); } else if (c == ')') { if (insideBracket) { result.Add(currentContent.ToString()); insideBracket = false; currentContent.Clear(); } } else if (insideBracket) { currentContent.Append(c); } } } return result; } public static void Main() { string[] test = {"(as) (bd) (ct)", "(sdf) te"}; var bracketContents = ExtractBracketContent(test); foreach (var content in bracketContents) { Console.WriteLine(content); } // 输出: // as // bd // ct // sdf } }
思路说明
- 用布尔变量
insideBracket跟踪当前是否处于括号内部 - 用
StringBuilder动态收集括号内的字符,避免频繁字符串拼接带来的性能损耗 - 逐个遍历每个字符串的字符:
- 遇到左括号
(时,标记进入括号状态,清空当前收集的内容 - 遇到右括号
)时,若此前处于括号内,则将收集的内容加入结果列表,同时退出括号状态 - 仅当处于括号内部时,才收集当前字符
- 遇到左括号
内容的提问来源于stack exchange,提问作者lurkagurka
相关产品推荐
相关产品推荐

