2011-05-22 57 views
6

使用单字符分隔符将字符串拆分为两部分的最佳方法是什么?如何在c#中使用字符分隔符将字符串拆分为两部分?

该字符串应该在分隔符的第一个实例上分割。该方法应考虑性能。它不应该假定分隔符存在于字符串中,字符串中有任何字符等。应该是通用代码,只要你需要插入即可。

(这总让我几分钟的时间来改写这样的事情,每当我需要它,所以我想我会成为一个问题,因为它)

回答

8

如果你真的想只有两个结果,使用字符串分割方法与第2个参数:

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

这可能会返回两个以上的部分,而不是一个字符串分成两个。 – 2011-05-22 13:15:58

+1

我添加了另一个版本的String.split,它可以做到这一点。 – slfan 2011-05-22 13:25:42

+0

哦,是的,我总是忘记那个版本的Split() - 这正是我想要的。 – Rory 2011-05-22 13:32:26

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; 
    } 
+0

为什么这么做的时候,已经有一个像slfan这样的方法指出了。 – 2011-05-22 13:15:01

+0

@Roopesh:如果分割字符出现多次? – 2011-05-22 13:17:22

+0

@Karlsen - 有一个选项。检查slfan的更新回复。 – 2011-05-22 14:38:53

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

我会先检查字符,以防止第二行代码上出现-1异常。 – 2011-05-22 13:12:55

+0

没错,我只是假设他知道这个字符是事先存在的。 – 2011-05-22 13:18:48

+0

我不能认为char是事先存在的;这是什么使这不是一个完全不重要的问题的一部分。同样,性能方面,这会计算IndexOf两次,对于大字符串来说可能很重要(尽管很小)。另外我认为part2将包含分隔符。 – Rory 2011-05-22 13:24:22

0

(这总让我几分钟的时间来改写这一类的,每当我需要的东西,所以我以为我会提出一个问题)

如果你需要这个频繁,你可以转换你的首选方式到extension method。基于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) }; 
    } 
} 
相关问题