gpt4 book ai didi

c# - 使用c#删除字符串中[]括号之间的逗号

转载 作者:太空狗 更新时间:2023-10-30 00:50:23 25 4
gpt4 key购买 nike

我想从字符串中删除方括号 [] 之间的逗号而不是整个逗号。

这是我的字符串,

string result= "a,b,c,[c,d,e],f,g,[h,i,j]";

预期输出:

a,b,c,[cde],f,g,[hij]

提前致谢。

最佳答案

如我所写,您需要一个简单的状态机(括号内,括号外)...然后针对每个字符,对其进行分析,如有必要,您可以更改状态机的状态并决定是否需要是否输出。

public static string RemoveCommas(string str) 
{
int bracketLevel = 0;

var sb = new StringBuilder(str.Length);

foreach (char ch in str)
{
switch (ch) {
case '[':
bracketLevel++;
sb.Append(ch);
break;

case ']':
if (bracketLevel > 0) {
bracketLevel--;
}

sb.Append(ch);
break;

case ',':
if (bracketLevel == 0) {
sb.Append(ch);
}

break;

default:
sb.Append(ch);
break;
}
}

return sb.ToString();
}

像这样使用它:

string result = "a,b,c,[c,d,e],f,g,[h,i,j]";
Console.WriteLine(RemoveCommas(result));

请注意,为了“保存”状态机的状态,我使用了 int,因此它可以使用递归括号,例如 a,b,[c,d, [e,f]g,h]i,j

作为一个有趣的练习,可以用较慢的 LINQ 表达式来完成:

string result2 = result.Aggregate(new 
{
BracketLevel = 0,
Result = string.Empty,
}, (state, ch) => new {
BracketLevel = ch == '[' ?
state.BracketLevel + 1 :
ch == ']' && state.BracketLevel > 0 ?
state.BracketLevel - 1 :
state.BracketLevel,
Result = ch != ',' || state.BracketLevel == 0 ? state.Result + ch : state.Result
}).Result;

最后代码非常相似......有一个状态(BracketLevel)加上正在构建的字符串(Result) . 请不要使用它,它只是作为 LINQ 的一个有趣的片段而编写的。

关于c# - 使用c#删除字符串中[]括号之间的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31745991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com