在C#中,如何检查字符串是否包含整数?

Mar*_*cel 36 c# string parsing integer tryparse

我只想知道,String变量是否包含可解析的正整数值.我现在不想解析这个值.

目前我在做:

int parsedId;
if (
    (String.IsNullOrEmpty(myStringVariable) ||
    (!uint.TryParse(myStringVariable, out parsedId))
)
{//..show error message}
Run Code Online (Sandbox Code Playgroud)

这很难看 - 如何更简洁?

注意:我知道扩展方法,但我想知道是否有内置的东西.

DGi*_*bbs 60

你可以使用char.IsDigit:

     bool isIntString = "your string".All(char.IsDigit)
Run Code Online (Sandbox Code Playgroud)

true如果字符串是数字,则返回

    bool containsInt = "your string".Any(char.IsDigit)
Run Code Online (Sandbox Code Playgroud)

true如果字符串包含数字,则返回

  • 如果`str`等于`"iuhs,./ hu3dwuh"`,则`str.Any(char.IsDigit)`将为真. (5认同)
  • @MagnusGrindalBakken关于你的(2):不,由于签名和返回类型是正确的,表达式`char.IsDigit`(一个所谓的方法组)_can_可以通过隐式转换为类型`Func <char,bool>`转换,这样部分就可以了. (4认同)
  • 我不是拒绝投票的人,而是1.字符串类上没有名为“任何”的静态函数(大概是将字符串变量称为“字符串”,但这是不可能的);2.如果您指的是Linq扩展方法`Any`,则必须这样称呼它:`s.Any(c =&gt; char.IsDigit(c))`; 3.我认为他希望* whole *字符串是一个整数,而不仅仅是在某处包含一个数字。否则,使用`int.TryParse`对他没有意义。 (2认同)

dtb*_*dtb 26

假设您要检查字符串中的所有字符是否为数字,您可以使用Enumerable.All扩展方法Char.IsDigit方法,如下所示:

bool allCharactersInStringAreDigits = myStringVariable.All(char.IsDigit);
Run Code Online (Sandbox Code Playgroud)


pan*_*ako 10

也许这可以帮助

string input = "hello123world";
bool isDigitPresent = input.Any(c => char.IsDigit(c));
Run Code Online (Sandbox Code Playgroud)

来自msdn的答复。

  • 问题的要求是字符串是否*包含*可解析的整数,而不是整个字符串是否代表数字。 (7认同)

Ser*_*kiy 6

您可以检查字符串是否仅包含数字:

Regex.IsMatch(myStringVariable, @"^-?\d+$")
Run Code Online (Sandbox Code Playgroud)

但是数字可能大于Int32.MaxValue或小于Int32.MinValue- 你应该牢记这一点.

另一种选择 - 创建扩展方法并在那里移动丑陋的代码:

public static bool IsInteger(this string s)
{
   if (String.IsNullOrEmpty(s))
       return false;

   int i;
   return Int32.TryParse(s, out i);
}
Run Code Online (Sandbox Code Playgroud)

这将使您的代码更干净:

if (myStringVariable.IsInteger())
    // ...
Run Code Online (Sandbox Code Playgroud)


Mar*_*cel 2

答案似乎是否定的。

尽管还有很多其他好的答案,但它们要么只是隐藏了丑陋的地方(我没有要求),要么引入了新的问题(边缘情况)。