我只想知道,String变量是否包含可解析的正整数值。我现在不想解析这个值。
目前我在做:
int parsedId;
if (
(String.IsNullOrEmpty(myStringVariable) ||
(!uint.TryParse(myStringVariable, out parsedId))
)
{//..show error message}
这很难看 - 如何更简洁?
注意:我知道扩展方法,但我想知道是否有内置的东西。
答案 0 :(得分:40)
您可以使用char.IsDigit:
bool isIntString = "your string".All(char.IsDigit)
如果字符串是数字
,将返回true
bool containsInt = "your string".Any(char.IsDigit)
如果字符串包含数字
,则返回true
答案 1 :(得分:25)
假设您要检查字符串中的所有字符是否为数字,您可以将Enumerable.All Extension Method与Char.IsDigit Method一起使用,如下所示:
bool allCharactersInStringAreDigits = myStringVariable.All(char.IsDigit);
答案 2 :(得分:5)
您可以检查字符串是否仅包含数字:
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())
// ...
答案 3 :(得分:4)
也许这可以帮助
string input = "hello123world";
bool isDigitPresent = input.Any(c => char.IsDigit(c));
来自msdn的答案。
答案 4 :(得分:3)
答案似乎是只是否。
虽然有很多其他好的答案,但他们要么隐藏丑陋(我没有要求),要么引入新问题(边缘案例)。
答案 5 :(得分:2)
这对我有用。
("your string goes here").All(char.IsDigit)
答案 6 :(得分:0)
抱歉,没有得到你的问题。这样的事情呢?
str.ToCharArray().Any(char.IsDigit);
或者该值是否必须是完整的整数,没有任何其他字符串?
if(str.ToCharArray().All(char.IsDigit(c));
答案 7 :(得分:0)
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();