[英]How to retrieve each value from string and add them to the list
到目前为止,这是我在C#中的代码
string myString = "value:12345, data:34298, end, value2:678910, data2:48957, end, value3:56546, data3:83576, end";
var tuple = new List<Tuple<int, int>>();
foreach (var value in myString)
{
int startPos = myString.IndexOf("value:") + "value:".Length;
int length = myString.LastIndexOf(", data") - startPos;
string valuesX = myString.Substring(startPos, length);
int values = int.Parse(valuesX);
int startPos2 = myString.IndexOf("data:") + "data:".Length;
int length2 = myString.LastIndexOf(", end") - startPos2;
string dataX = myString.Substring(startPos2, length2);
int data = int.Parse(dataX);
tuple.Add(Tuple.Create(values, data));
}
我想从字符串中检索值号和数据号,并使用整数数据类型将它们放入列表中
这张图片展示了我想要实现的目标:
该代码根本行不通,我将不胜感激,谢谢
首先,您不能只循环遍历这样的字符串,您需要将其拆分。
根据以下假设:
那么以下将起作用。
string myString = "value:12345, data:34298, end, value2:678910, data2:48957, end, value3:56546, data3:83576, end";
List<Tuple<int, int>> tuple = new List<Tuple<int, int>>();
// first split the string on commas so we have a collection to loop through
string[] splitString = myString.Split(',');
// Assuming the Value:#, Data:#, end structure, we can loop by 3 each time
for (int i = 0; i < splitString.Length; i = i+3)
{
/* Assuming the above structure, we can be sure that
* i = Value
* i+1 = Data
* i+2 = end - which we can ignore
* all will be integers by assumption so no need to check, just parse
* Always in string:# pattern so we split on : and take the second item
*/
int value = Int32.Parse(splitString[i].Split(':')[1]);
int data = Int32.Parse(splitString[i + 1].Split(':')[1]);
tuple.Add(Tuple.Create(value, data));
}
您可以使用正则表达式。 这是下面的代码。
string myString = "value:12345, data:34298, end, value2:678910, data2:48957, end, value3:56546, data3:83576, end";
var matches = Regex.Matches(myString, @"value[0-9]*\:([0-9]+) *, * data[0-9]*\:([0-9]+)");
var pairs = new List<(int key, int value)>();
foreach (Match match in matches)
{
var a = int.Parse(match.Groups[1].ToString());
var b = int.Parse(match.Groups[2].ToString());
pairs.Add((a,b));
}
使用Linq,可以将字符串处理为子字符串,然后处理为List
的值:
var tuples = myString.Split(new[] { ", end" }, StringSplitOptions.None) ' split into data strings
.Select(s => s.Split(new[] { ", " }, StringSplitOptions.RemoveEmptyEntries) ' split into data string pairs
.Select(s2 => Int32.Parse(s2.Split(':')[1])).ToList()) ' extract number and make int32 pairs
.Where(s => s.Count > 0) ' exclude empty data strings
.Select(s => (s[0], s[1])).ToList(); ' create tuples and put in a List
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.