gpt4 book ai didi

c# - 如何处理 string.split 按位置

转载 作者:太空宇宙 更新时间:2023-11-03 13:00:36 24 4
gpt4 key购买 nike

我想问一个关于String.Split的问题

例如:

char[] semicolon=new [] {';'};
char[] bracket=new [] {'[',']'};
string str="AND[Firstpart;Sndpart]";

我可以用括号拆分 str,然后用分号拆分。最后,我得到了括号中的 Firstpart 和 Sndpart。

但是如果 str="AND[AND[Firstpart;Sndpart];sndpart];我怎样才能得到 AND[Firpart;Sndpart]sndpart

有没有办法告诉 c# 用第二个分号分割?

谢谢你的帮助

最佳答案

一种方法是使用未在任何字符串中使用的字符将字符隐藏在括号内。

方法HideSplit:此方法将括号内的分隔符更改为假分隔符。然后它会执行拆分并返回带有原始字符的结果。

如果您想多次执行此操作,则此方法可能有点矫枉过正。但如果您有想法,您应该能够轻松地对其进行优化。

    private static void Main()
{
char[] semicolon = new[] { ';' };
char[] bracket = new[] { '[', ']' };
string str = "AND[AND[Firstpart;Sndpart];sndpart]";

string[] splitbyBracket = HideSplit(str, bracket);
}

private static string[] HideSplit(string str,char[] separator)
{
int counter = 0; // When counter is more than 0 it means we are inside brackets
StringBuilder result = new StringBuilder(); // To build up string as result

foreach (char ch in str)
{
if(ch == ']') counter--;

if (counter > 0) // if we are inside brackets perform hide
{
if (ch == '[') result.Append('\uFFF0'); // add '\uFFF0' instead of '['
else if (ch == ']') result.Append('\uFFF1');
else if (ch == ';') result.Append('\uFFF2');
else result.Append(ch);
}
else result.Append(ch);

if (ch == '[') counter++;
}


string[] split = result.ToString().Split(separator); // Perform split. (characters are hidden now)

return split.Select(x => x
.Replace('\uFFF0', '[')
.Replace('\uFFF1', ']')
.Replace('\uFFF2', ';')).ToArray(); // unhide characters and give back result.
// dont forget: using System.Linq;
}

一些例子:

string[] a1 = HideSplit("AND[AND[Firstpart;Sndpart];sndpart]", bracket);
// Will give you this array { AND , AND[Firstpart;Sndpart];sndpart }

string[] a2 = HideSplit("AND[Firstpart;Sndpart];sndpart", semicolon);
// Will give you this array { AND[Firstpart;Sndpart] , sndpart }

string[] a3 = HideSplit("AND[Firstpart;Sndpart]", bracket);
// Will give you this array { AND , Firstpart;Sndpart }

string[] a4 = HideSplit("Firstpart;Sndpart", semicolon);
// Will give you this array { Firstpart , Sndpart }

你可以继续这样 split 。

关于c# - 如何处理 string.split 按位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32422288/

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