如何检查字符串数组中的所有字符串是否都是数字?

时间:2016-06-08 08:39:55

标签: c# linq

我有一个字符串,我希望它只是数字。我尝试使用LINQ

string[] values = { "123", "a123" };
bool allStringsContaintsOnlyDigits = true;

foreach(string value in values)
{
    if(!value.All(char.IsDigit))
    {
        allStringsContaintsOnlyDigits = false;
        break;
    }
}

if(allStringsContaintsOnlyDigits) { /* Do Stuff */ }

但只有两个字符串的循环(并保证我有两个字符串)有点单调乏味......

所以我想也许这样做:

if(values[0].All(char.isDigit) && values[1].All(char.isDigit)) { /* Do Stuff */ }

但是有更优雅的方式吗?类似的东西:

values.All(char.IsDigit) // for all strings

感谢。

注意:负数需要被拒绝。含义:-125应返回false

5 个答案:

答案 0 :(得分:13)

怎么样

values.All(s => s.All(Char.IsDigit));

检查序列所有字符中的所有字符串是否为数字。

答案 1 :(得分:4)

values.SelectMany(s => s).All(char.IsDigit);

答案 2 :(得分:2)

你可以这样做。

使用正则表达式。

bool allints = values.All(x=> Regex.IsMatch(x, @"^[0-9]*$"));

使用int.Parse的另一种方法,但请注意允许的max(int)值为2147483647。

int value;
bool allints = values.All(x=>x[0] != '-' && int.TryParse(x.Trim(), out vlaue));

答案 3 :(得分:2)

检查 string 是否全部为数字:

  String value = ...

  boolean allDigits = value.All(c => c >= '0' && c <= '9');

要检查IEnumerable<string>(包括string[])是否全部为数字:

  String[] source = ...

  boolean allDigits = source
    .All(value => value
      .All(c => c >= '0' && c <= '9'));

请注意,由于Char.IsDigit(c)返回 true 问题中的初始c >= '0' && c <= '9')更改为Char.IsDigit >不仅在0..9上,而且在许多其他角色上,例如波斯数字:۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ...

答案 4 :(得分:2)

(values[0] + values[1]).All(char.IsDigit);

因为它们都只是字符串,所以将它们连接起来然后在每个字符上使用LINQ。