如何在C#中从字符串中解析出整数?

3

我有一个包含整数的字符串。如何在C#中解析整数?

假设我有以下字符串,其中包含一个整数:

    15 person 
    person 15
    person15
    15person

我该如何追踪它们,或者在字符串中没有整数时返回null

1
例如,对于输入的 15per13so14n,您希望发生什么? - Jaymz
4个回答

4
您可以删除所有非数字字符,并在字符串中有剩余的情况下进行解析:
str = Regex.Replace(str, "\D+", String.Empty);
if (str.Length > 0) {
  int value = Int32.Parse(str);
  // here you can use the value
}

4
将以下代码粘贴到测试中:

将以下代码粘贴到测试中:

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 - 它将返回输入字符串中所有匹配项的可枚举对象。


2

使用类似以下代码:

Regex r = new Regex("\d+");
Match m = r.Match(yourinputstring);

if(m.Success)
{
     Dosomethingwiththevalue(m.Value);
}

0

由于每个人都使用正则表达式来提取数字,这里介绍一种使用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) 来获取数字。 - Guffa
@Guffa 谢谢,我已经相应地编辑了答案。这实际上来自一个我经常使用的扩展方法,用于检查任何字符串是否包含有效/无效字符,我只是将“有效字符”参数重构为“0123456789”。 - takrl
你不需要编写lambda表达式c => Char.IsDigit(c),你可以直接使用Char.IsDigit - Guffa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接