我有一些看起来像这样的字符串:
我需要存储在不同int变量中的每个值(97、145、3、5、77、97、5和10)。“ 97-145,3-5,77-87,5-10”
我首先尝试遍历每个字符的字符串并搜索“-”或“”,但是不幸的是,这不适用于所有行,因为有些行看起来像这样:
“ 97、3、77-87、5-10”
因此,在这种情况下,当我在存储第一个值(97)之后搜索下一个'-'时,它将搜索直到找到下一个'-'字符,然后存储87。
有没有更好的方法来解决这个问题?
答案 0 :(得分:1)
假设您不需要小数,可以使用Regex
轻松实现。具体来说,匹配\d+
,这将找到所有数字组。然后只需解析每个组Int32.Parse
或Int32.TryParse
即可完成。
以下是正则表达式解析的示例:https://regex101.com/r/YrHtY5/1
这是一个快速的代码示例:
var input = "97-145, 3-5, 77-87, 5-10";
var regex = new Regex("\\d+");
var regexMatches = regex.Matches(input);
var results = new List<int>();
foreach(Match match in regexMatches)
results.Add(Int32.Parse(match.Value));
答案 1 :(得分:1)
假设拆分始终为-
或,
,您可以使用拆分轻松地完成此操作:
string str = "97-145, 3-5, 77-87, 5-10";
var ints = str.Split(new string[] { "-", "," }, StringSplitOptions.None).Select(int.Parse).ToArray();
foreach (int i in ints) Console.WriteLine(i);
哪个给:
97
145
3
5
77
87
5
10
答案 2 :(得分:0)
我将字符串中的-
替换为,
,然后拆分:
string s = "97-145, 3-5, 77-87, 5-10";
string[] sArray = s.Replace("-", ",").Split(',');
int[] iArray = Array.ConvertAll(sArray, int.Parse);
foreach (int i in iArray) {
Console.WriteLine(i);
}
但是您也可以使用{'-',','}