2011-05-22 80 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) }; 
    } 
}