我有一个编码字符串,我想从中检索一个值。我意识到我可以进行一些字符串操作(IndexOf
,LastIndexOf
等)从下面的字符串中提取12_35_55_219
,但我想知道是否有更简洁的方法
"AddedProject[12_35_55_219]0"
答案 0 :(得分:6)
如果您可以确定字符串的格式,则存在多种可能性:
我最喜欢的是创建一个非常简单的标记器:
string[] arrParts = yourString.Split( "[]".ToCharArray() );
由于字符串有常规格式,因此arrParts将有三个条目,您感兴趣的部分将为arrParts[1]
。
如果字符串格式不同,那么您将不得不使用其他技术。
答案 1 :(得分:5)
总而言之,如果您有一个可以应用于字符串的模式,最简单的方法是使用正则表达式,如Guffa示例所示。
另一方面,你总是有不同的标记来定义字符串的开头和结尾,那么你应该使用IndexOf和LastIndexOf组合并将标记作为参数传递,使Fredrik的例子更加通用:
string GetMiddleString(string input, string firsttoken, string lasttoken)
{
int pos1 = input.IndexOf(firsttoken) + 1;
int pos2 = input.IndexOf(lasttoken);
string result = input.Substring(pos1 , pos2 - pos1);
return result
}
这假设您的令牌只在字符串中发生一次。
答案 2 :(得分:4)
这取决于字符串可以变化多少。例如,您可以使用正则表达式:
string input = "AddedProject[12_35_55_219]0";
string part = Regex.Match(input, @"\[[\d_]+\]").Captures[0].Value;
答案 3 :(得分:1)
您可能会发现有两种方法很有用,IndexOf
和LastIndexOf
方括号作为参数。通过一些研究,您应该能够提取项目编号。
答案 4 :(得分:0)
这是Wagner Silveira的GetMiddleString
的改进string GetMiddleString(string input, string firsttoken, string lasttoken)
{
int pos1 = input.ToLower().IndexOf(firsttoken.ToLower()) + firsttoken.Length;
int pos2 = input.ToLower().IndexOf(lasttoken.ToLower());
return input.Substring(pos1 , pos2 - pos1);
}
在这里你如何使用它
string data = "AddedProject[12_35_55_219]0";
string[] split = data.Split("[]".ToCharArray());
rtbHelp.Text += GetMiddleString(data, split[0], split[2]).Trim("[]".ToCharArray());//print it to my C# winForm RichTextBox Help