C#中只进行一次拆分的快捷方式

本文关键字:一次 拆分 快捷方式 | 更新日期: 2023-09-27 18:25:04

好吧,假设我有一个字符串:

string text = "one|two|three";

如果我执行string[] texts = text.Split('|');,我将得到一个由三个对象组成的字符串数组。然而,这不是我想要的。我真正想要的是只拆分字符串一次。。。所以我可以得到两个阵列:

one
two|three

此外,有没有一种方法可以对字符串中最后一个出现的部分进行单独拆分?所以我得到:

one|two
three

还有,有没有一种方法可以用字符串而不是字符进行拆分?所以我可以做Split("||")

C#中只进行一次拆分的快捷方式

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("|")))
        };