我正在循環訪問一個數組,並且在那裏有一個字符串,像這樣的例子:「1001 - 一些成分」。刪除部分字符串的最佳方法是什麼? (C#)
眼下,通過數組我環路我得到整個字符串
string ingCode = theData[i + 1];
但我真正需要的是簡單的「1001」,而不是整個世邦。
我正在循環訪問一個數組,並且在那裏有一個字符串,像這樣的例子:「1001 - 一些成分」。刪除部分字符串的最佳方法是什麼? (C#)
眼下,通過數組我環路我得到整個字符串
string ingCode = theData[i + 1];
但我真正需要的是簡單的「1001」,而不是整個世邦。
結合一些的,以獲得所述第一部分或所述代碼列出的其他方法
string myString = "1001--Some ingredient";
string myPortionOfString = myString.Substring(0, myString.IndexOf("--"));
這使您可以處理比4個字符更長(或更短)的成分代碼。
如果分隔符發生變化,但所需信息始終爲數字,則使用Regex解析出數字。
這是迄今爲止最有效,最簡潔和最合適的答案。 (編輯答案修復一個小錯字錯誤:-)) – 2010-03-10 17:33:50
+1這適用於字符串的更多變體 – Javier 2010-03-10 17:44:56
@Aviad P. - 謝謝。這就是我得到的複製/粘貼代碼。 – 2010-03-10 17:46:45
您可以使用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
您可以使用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("--"));
//...
如果分隔符始終「 - 」,你可能會給一個鏡頭:
string ingCode = theData[i+1].Split('-')[0];
如果你在數字的字符串的開頭一直有興趣,嘗試一個正則表達式:
string ingCode = System.Text.RegularExpressions.Regex.Match(theData[i+1], @"^([0-9]*)").ToString();
雖然正確,但對於手頭的問題來說這是一個矯枉過正的問題,split會在分隔符之間創建所有子字符串的數組,但我們只對第一個元素感興趣。正則表達式是通用的解決方案,但對於這個簡單的任務並不需要 - 而且可讀性是一個缺點。 – 2010-03-10 17:37:34
如果您要求它使用拆分(數組
你可以使用正則表達式:
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"]);
能在幾個不同的方式來完成,這取決於你知道什麼數據將是什麼樣子。
假設我們一直在尋找的第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];
它是否始終是相同的格式,即您希望前面的部分 - ? – Pharabus 2010-03-10 17:09:36
要保留的字符串部分或要丟棄的字符串部分的標準是什麼? – jball 2010-03-10 17:09:38
是的,我想要「 - 」之前的所有內容。我嘗試了Data [i + 1] .Split(「 - 」)[0],但ReSharper說,「參數類型字符串不能分配給參數類型char」。 – Matt 2010-03-10 17:16:29