我只想知道一个String类型的变量是否包含可解析为正整数值。我现在不想解析这个值。
目前我正在进行以下操作:
int parsedId;
if (
(String.IsNullOrEmpty(myStringVariable) ||
(!uint.TryParse(myStringVariable, out parsedId))
)
{//..show error message}
这很丑 - 如何更加简洁?
注意:我知道扩展方法,但我想知道是否有内置的方法。
bool isIntString = "your string".All(char.IsDigit)
如果字符串是数字,将返回true
bool containsInt = "your string".Any(char.IsDigit)
如果字符串中包含数字,将会返回true
str
等于"iuhs,./hu3dwuh"
,那么str.Any(char.IsDigit)
将为真。 - Jeppe Stig Nielsenstring
类上没有叫做 Any
的静态函数(我猜你想要称呼字符串变量为 string
,但这是不可能的);2. 如果你是指 Linq 扩展方法 Any
,你需要这样调用它:s.Any(c => char.IsDigit(c))
;3. 我认为他希望整个字符串都是一个整数,而不仅仅包含某个数字;否则他使用 int.TryParse
是毫无意义的。 - Magnus Grindal Bakkenchar.IsDigit
(所谓的方法组)可以通过隐式转换转换为类型Func<char,bool>
,所以这部分是可以的。 - Jeppe Stig Nielsens.Any(x => char.IsDigit(x))
,你可以只传递char.IsDigit
作为委托,试试看... https://dotnetfiddle.net/qS59c0,第一个示例满足“整个字符串是整数”的要求。 - DGibbs假设您希望检查字符串中的所有字符是否都是数字,您可以使用Enumerable.All扩展方法与Char.IsDigit方法,如下所示:
bool allCharactersInStringAreDigits = myStringVariable.All(char.IsDigit);
myStringVariable
包含来自世界各地的许多不同“脚本”的数字字符,例如结合了西方数字的印度-阿拉伯数字,那该怎么办? - Jeppe Stig Nielsen也许这能帮到你
string input = "hello123world";
bool isDigitPresent = input.Any(c => char.IsDigit(c));
来自msdn的答案。
您可以检查字符串是否仅包含数字:
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())
// ...
foreach (var s in str)
{
if (String.IsNullOrEmpty(s))
return isInteger;
int i;
isInteger = Int32.TryParse(s, out i);
if (isInteger == false)
return isInteger;
}
return isInteger;
}` - Ashish Kumar Jaryal("your string goes here").All(char.IsDigit)
str.ToCharArray().Any(char.IsDigit);
if(str.ToCharArray().All(char.IsDigit(c));
-----
会返回什么? - I4V 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();
int.TryParse(myStringVariable, out void)
或类似的形式。编译器应该会自动引入一个“生成”的本地变量,其类型正确,但在代码中并不显得难看。当然,这个生成的变量将无法访问(应该具有一些“疯狂”的非法名称)。 - Jeppe Stig Nielsen
int.TryParse
更改为uint.TryParse
,以使看起来像负整数的字符串返回 false。 - Jeppe Stig Nielsen