C#中只进行一次拆分的快捷方式
本文关键字:一次 拆分 快捷方式 | 更新日期: 2023-09-27 18:25:04
好吧,假设我有一个字符串:
string text = "one|two|three";
如果我执行string[] texts = text.Split('|');
,我将得到一个由三个对象组成的字符串数组。然而,这不是我想要的。我真正想要的是只拆分字符串一次。。。所以我可以得到两个阵列:
one
two|three
此外,有没有一种方法可以对字符串中最后一个出现的部分进行单独拆分?所以我得到:
one|two
three
还有,有没有一种方法可以用字符串而不是字符进行拆分?所以我可以做Split("||")
Split方法以计数为参数,您可以在该位置传递2
,这基本上表明您对最大值仅2
元素感兴趣。你会得到预期的结果。
第二个问题:没有内置的方式AFAIK。您可能需要通过拆分所有内容并加入第一个和第二个来实现它。
C#的String.Split()
可以采用第二个参数,该参数可以定义要返回的元素数量:
string[] texts = text.Split(new char[] { '|' }, 2);
对于第一个场景,您可以传递一个参数,表示要拆分为多少个字符串。
var text = "one|two|three";
var result = text.Split(new char[] { '|' }, 2);
你的第二个场景需要更多的魔法。
var text = "one|two|three";
var list = text.Split('|');
var result = new string[] { string.Join("|", list, 0, list.Length - 1), list[list.Length - 1] };
在使用之前,尚未验证代码以检查结果。
好吧,我认为在一行中完成第二个是一个挑战。结果…不太好,主要是因为反转字符串并将其保持为字符串非常困难。
string text = "one|two|three";
var result = new String(text.Reverse().ToArray()).Split(new char[] {'|'}, 2).Reverse().Select(c => new String(c.Reverse().ToArray()));
基本上,您可以反转它,然后遵循与第一个相同的过程,然后反转每个单独的数组以及生成的数组。
您也可以简单地这样做。。。
//To split at first occurence of '|'
if(text.Containts('|')){
beginning = text.subString(0,text.IndexOf('|'));
ending = text.subString(text.IndexOf('|');
}
//To split at last occurence of '|'
if(text.Contains('|')){
beginning = text.subString(0,text.LastIndexOf('|'));
ending = text.subString(text.LastIndexOf('|');
}
第二个问题很有趣。我是这样解决的:
string text = "one|two|three";
var result =
new []
{
string.Concat(text.ToCharArray().TakeWhile((c, i) => i <= text.LastIndexOf("|"))),
string.Concat(text.ToCharArray().SkipWhile((c, i) => i <= text.LastIndexOf("|")))
};