64

我只想知道,字符串变量是否包含可解析的正整数值。我现在不想解析该值。

目前我正在做:

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

这很难看 - 如何更简洁?

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

4

8 回答 8

118

你可以使用char.IsDigit

     bool isIntString = "your string".All(char.IsDigit)

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

    bool containsInt = "your string".Any(char.IsDigit)

true如果字符串包含数字将返回

于 2013-08-15T11:40:49.063 回答
36

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

bool allCharactersInStringAreDigits = myStringVariable.All(char.IsDigit);
于 2013-08-15T11:38:28.553 回答
29

也许这可以帮助

string input = "hello123world";
bool isDigitPresent = input.Any(c => char.IsDigit(c));

来自msdn的回答。

于 2015-12-14T22:11:30.113 回答
6

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

Regex.IsMatch(myStringVariable, @"^-?\d+$")

但是数字可以大于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);
}

这将使您的代码更干净:

if (myStringVariable.IsInteger())
    // ...
于 2013-08-15T11:38:54.530 回答
5

这对我有用。

("your string goes here").All(char.IsDigit)
于 2019-04-12T07:04:15.433 回答
4

抱歉,没完全明白你的问题。所以像这样的东西?

str.ToCharArray().Any(char.IsDigit);

还是该值必须完全是一个整数,没有任何额外的字符串?

if(str.ToCharArray().All(char.IsDigit(c));
于 2013-08-15T11:38:45.437 回答
2

答案似乎是否定的。

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

于 2013-08-15T11:54:51.707 回答
1
        string text = Console.ReadLine();
        bool isNumber = false;

        for (int i = 0; i < text.Length; i++)
        {
            if (char.IsDigit(text[i]))
            {
                isNumber = true;
                break;
            }
        }

        if (isNumber)
        {
            Console.WriteLine("Text contains number.");
        }
        else
        {
            Console.WriteLine("Text doesn't contain number.");
        }

        Console.ReadKey();

或 Linq:

        string text = Console.ReadLine();

        bool isNumberOccurance =text.Any(letter => char.IsDigit(letter));
        Console.WriteLine("{0}",isDigitPresent ? "Text contains number." : "Text doesn't contain number.");
        Console.ReadKey();
于 2020-10-16T10:35:28.807 回答