我有一个包含整数的字符串。如何在C#中解析整数?
假设我有以下字符串,其中包含一个整数:
15 person
person 15
person15
15person
我该如何追踪它们,或者在字符串中没有整数时返回
null
?str = Regex.Replace(str, "\D+", String.Empty);
if (str.Length > 0) {
int value = Int32.Parse(str);
// here you can use the value
}
将以下代码粘贴到测试中:
public int? ParseAnInt(string s)
{
var match = System.Text.RegularExpressions.Regex.Match(s, @"\d+");
if (match.Success)
{
int result;
//still use TryParse to handle integer overflow
if (int.TryParse(match.Value, out result))
return result;
}
return null;
}
[TestMethod]
public void TestThis()
{
Assert.AreEqual(15, ParseAnInt("15 person"));
Assert.AreEqual(15, ParseAnInt("person 15"));
Assert.AreEqual(15, ParseAnInt("person15"));
Assert.AreEqual(15, ParseAnInt("15person"));
Assert.IsNull(ParseAnInt("nonumber"));
}
如果没有找到数字,该方法将返回null - 它还处理数字导致整数溢出的情况。
为了减少溢出的可能性,您可以改用long.TryParse
同样,如果您预计有多个数字组,并且您想将每个组解析为离散数字,则可以使用Regex.Matches
- 它将返回输入字符串中所有匹配项的可枚举对象。
使用类似以下代码:
Regex r = new Regex("\d+");
Match m = r.Match(yourinputstring);
if(m.Success)
{
Dosomethingwiththevalue(m.Value);
}
由于每个人都使用正则表达式来提取数字,这里介绍一种使用Linq的方法:
string input = "15person";
string numerics = new string(input.Where(Char.IsDigit).ToArray());
int result = int.Parse(numerics);
仅为完整起见,这可能不是非常优雅的。关于Jaymz的评论,当传递15per13so14n时,它将返回151314。
input.Where(Char.IsDigit)
来获取数字。 - Guffac => Char.IsDigit(c)
,你可以直接使用Char.IsDigit
。 - Guffa
15per13so14n
,您希望发生什么? - Jaymz