2010-03-10 110 views
2

我正在循環訪問一個數組,並且在那裏有一個字符串,像這樣的例子:「1001 - 一些成分」。刪除部分字符串的最佳方法是什麼? (C#)

眼下,通過數組我環路我得到整個字符串

string ingCode = theData[i + 1]; 

但我真正需要的是簡單的「1001」,而不是整個世邦。

+0

它是否始終是相同的格式,即您希望前面的部分 - ? – Pharabus 2010-03-10 17:09:36

+0

要保留的字符串部分或要丟棄的字符串部分的標準是什麼? – jball 2010-03-10 17:09:38

+0

是的,我想要「 - 」之前的所有內容。我嘗試了Data [i + 1] .Split(「 - 」)[0],但ReSharper說,「參數類型字符串不能分配給參數類型char」。 – Matt 2010-03-10 17:16:29

回答

9

結合一些的,以獲得所述第一部分或所述代碼列出的其他方法

string myString = "1001--Some ingredient"; 
string myPortionOfString = myString.Substring(0, myString.IndexOf("--")); 

這使您可以處理比4個字符更長(或更短)的成分代碼。

如果分隔符發生變化,但所需信息始終爲數字,則使用Regex解析出數字。

+0

這是迄今爲止最有效,最簡潔和最合適的答案。 (編輯答案修復一個小錯字錯誤:-)) – 2010-03-10 17:33:50

+0

+1這適用於字符串的更多變體 – Javier 2010-03-10 17:44:56

+0

@Aviad P. - 謝謝。這就是我得到的複製/粘貼代碼。 – 2010-03-10 17:46:45

0

您可以使用StringBuilder類,或通過在[0],[1],[2],[3]處附加索引來創建新字符串(如果您始終需要前4個字符) 您還可以創建一個左功能:

Console.Writeline(Left(myString, 4)); 

public static string Left(string param, int length)   
{   
string result = param.Substring(0, length);    
return result;   
} 

你可以做的另一件事是創建一個字符串擴展方法:

static class StringExtensions 
{ 
    public static String Left(this string str, int numbOfChars) 
    { 
    if(str.Length <= numbOfChars) return str; 
    return str.Substring(0, numbOfChars); 
    } 

    public static String Right(this string str, int numbOfChars) 
    { 
     if numbOfChars >= str.Length) return str; 
     return str.Substring(str.Length, str.Length-numbOfChars); 
    } 
} 

您可以撥打這個是這樣的:

String test = "Hello World"; 
String str = test.Left(3); //returns Hel 
+0

但是然後左(4)將是地獄.. :-P – Patrick 2010-03-10 17:41:45

+0

@帕特里克 - 看起來如此:-p,我仍然認爲如果您打算重用它,自定義擴展類是正確的方法:)。 – JonH 2010-03-10 17:49:10

3

您可以使用SubString方法:

string myString = "1001--Some ingredient"; 
    string myPortionOfString = myString.Substring(0, 4); 
    Console.WriteLine(myPortionOfString); 

控制檯輸出是這樣的:

你指的這個?

編輯:

看到評論,如果您不知道到底有多少數量是前經過「 - 」,最好的答案是一個由@Rob艾倫 propossed。我給他+1。

//... 
string myPortionOfString = myString.Substring(0, myString.IndexOf("--")); 
//... 
+0

如果「 - 」代替假設總是4位數,我也可能會查找第一個索引。 – Mark 2010-03-10 17:23:00

+0

@Mark,@Aviad P:@Matt發表了他的評論,告訴他20分鐘。之前,我在那之前回答了這個問題,26分鐘。以前,所以我認爲我不應該得到那種失望。 – Javier 2010-03-10 17:39:29

+0

取消了downvote。 – 2010-03-10 17:46:46

3

如果分隔符始終「 - 」,你可能會給一個鏡頭:

string ingCode = theData[i+1].Split('-')[0]; 

如果你在數字的字符串的開頭一直有興趣,嘗試一個正則表達式:

string ingCode = System.Text.RegularExpressions.Regex.Match(theData[i+1], @"^([0-9]*)").ToString(); 
+3

雖然正確,但對於手頭的問題來說這是一個矯枉過正的問題,split會在分隔符之間創建所有子字符串的數組,但我們只對第一個元素感興趣。正則表達式是通用的解決方案,但對於這個簡單的任務並不需要 - 而且可讀性是一個缺點。 – 2010-03-10 17:37:34

+0

如果您要求它使用拆分(數組 []()[],Int32),而不是全部需要它們,則拆分僅創建* all *子字符串。但是,是的,因爲你不需要第二部分,效率仍然很低。 – 2010-03-10 18:32:17

2

你可以使用正則表達式:

Regex rgx = new Regex(@"(?<Code>\d+)--(?<Ingedient>\w+)", RegexOptions.IgnoreCase); 
MatchCollection matches = rgx.Matches("1001--Some Ingredient"); 
foreach(Match match in matches) 
    Console.WriteLine("Code:{0}, Ingredient:{1}",match.Groups["Code"], match.Groups["Ingredient"]); 
1

能在幾個不同的方式來完成,這取決於你知道什麼數據將是什麼樣子。

假設我們一直在尋找的第4個字符:

string ingCode = theData[i + 1].Substring(0, 4); 

假設我們正在尋找之前無論發生什麼事「 - 」:

string ingCode = theData[i + 1].Split(new string[] {"--"}, StringSplitOptions.None)[0]; 

假設我們正在尋找在字符串的開始處有一個或多個數字:

string ingCode = Regex.Match(theData[i + 1], @"^\d+").Captures[0]; 
相關問題