如何在C#中使用字符分隔符将字符串拆分为两个部分?

8
什么是将字符串按单个字符分隔成两部分的最佳方法?
该方法应该在第一个分隔符实例上拆分字符串。该方法应该考虑性能,不应该假设分隔符存在于字符串中或字符串包含任何字符等,应该是通用代码,您可以随时插入到需要的地方。
(每当我需要这样的代码时,我总是需要几分钟来重写它,所以我想为它提出一个问题)
4个回答

8

如果您真的只想得到两个结果,请使用字符串分割方法并加上第二个参数:

string[] words = myString.Split(new char[]{' '}, 2);

1
可能会返回超过两个部分,而不是字符串分成两个部分。 - Teoman Soygul
1
我添加了另一个版本的String.split,也许可以解决问题。 - slfan
哦,是啊,我总是忘记那个版本的Split() - 那正是我想要的。 - Rory
3
实际上,(String, int) 没有覆盖重载方法,你需要使用 myString.Split(new char[]{' '},2) - Rory

3
var part1 = myString.SubString(0, myString.IndexOf(''));
var part2 = myString.SubString(myString.IndexOf(''), myString.Lenght);

2
我会先检查字符,以防止在您的第二行代码上出现异常-1。 - Kees C. Bakker
没错,我只是假设他事先知道这个字符存在。 - Teoman Soygul
我不能假设字符事先存在;这是使这个问题不完全平凡的部分。此外,从性能上讲,这会计算两次IndexOf,对于一个大字符串来说可能是显著的(尽管很小)。另外,我认为part2将包含分隔符字符。 - Rory
1
只是一个片段,你总是可以进行修改,例如使用“var index = myString.IndexOf('');”来缓存索引等。 - Teoman Soygul

0
    string[] SplitStringInTwo(string input, char separator)
    {
        string[] results = new string[2];
        if (string.IsNullOrEmpty(input)) return results;
        int splitPos = input.IndexOf(separator);
        if (splitPos <= 0) return results;
        results[0] = input.Substring(0, splitPos);
        if (splitPos<input.Length)
            results[1] = input.Substring(splitPos + 1);
        return results;
    }

为什么要这样做,当已经有像slfan指出的方法一样的方法呢? - Roopesh Shenoy
@Roopesh:如果分割字符出现多次怎么办? - Lasse V. Karlsen
@Karlsen - 有一个选项可以解决这个问题。请查看slfan的更新回复。 - Roopesh Shenoy

0
(每次我需要这样的代码时,总是需要花费几分钟时间重写它,所以我想为此创建一个问题)
如果您经常需要这个功能,可以将您喜欢的实现方式转换成扩展方法。基于 Teoman Soygul 的建议:
public static class StringExtensions
{
  public static string[] TwoParts(this String str, char splitCharacter)
  {
    int splitIndex = str.IndexOf(splitCharacter);
    if(splitIndex == -1)
      throw new ArgumentException("Split character not found.");

    return new string[] {
      str.SubString(0, splitIndex),
      str.SubString(splitIndex, myString.Lenght) };
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接