将此字符串行更改为多个Int的最佳方法?

时间:2018-08-18 13:22:41

标签: c# string

我有一些看起来像这样的字符串:

  

“ 97-145,3-5,77-87,5-10”

我需要存储在不同int变量中的每个值(97、145、3、5、77、97、5和10)。

我首先尝试遍历每个字符的字符串并搜索“-”或“”,但是不幸的是,这不适用于所有行,因为有些行看起来像这样:

  

“ 97、3、77-87、5-10”

因此,在这种情况下,当我在存储第一个值(97)之后搜索下一个'-'时,它将搜索直到找到下一个'-'字符,然后存储87。

有没有更好的方法来解决这个问题?

3 个答案:

答案 0 :(得分:1)

假设您不需要小数,可以使用Regex轻松实现。具体来说,匹配\d+,这将找到所有数字组。然后只需解析每个组Int32.ParseInt32.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

演示:https://dotnetfiddle.net/zE0LtW

答案 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);
}

但是您也可以使用{'-',','}