我正在循环访问一个数组,并且在那里有一个字符串,像这样的例子:“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