【问题标题】:how to use Any(char.IsDigit) to extract the int value [duplicate]如何使用 Any(char.IsDigit) 提取 int 值 [重复]
【发布时间】:2022-11-22 15:43:05
【问题描述】:

我有这行代码

    bool containsInt = "Sanjay 400".Any(char.IsDigit)

我想要做的是从字符串中提取 400 但是

Any(char.IsDigit)

只返回一个真值。我对编码非常陌生,尤其是 c#。

【问题讨论】:

  • 你想提取 400 还是想提取任何字符串的数字?
  • @DonMiguelSanchez 任何字符串的编号
  • 你在这里的期望值是多少? 400 或每个数字,如 4、0、0?
  • 您希望“Sanjay 400 in Mumbai 1234”发生什么?结果应该是“4001234”?

标签: c#


【解决方案1】:

正如您已经发现的那样,您不能使用 Any 进行提取。

您需要使用 Where 方法:

List<char> allInts = "Sanjay 400".Where(char.IsDigit).ToList();

结果将是一个包含字符串中所有整数/数字的列表。

【讨论】:

  • 你的解决方案很聪明,但如果他想拥有 400 的价值,这将行不通
  • 也许再添加一行:numberString = string.Join("", allInts.ToArray());
  • ^^ 或作为 int :int.TryParse(input.Where(char.IsDigit).ToArray(), out int myValue )
【解决方案2】:
int result = int.Parse(string.Concat("Sanjay 400".Where(char.IsDigit)));

【讨论】:

  • int.TryParse 会是更好的选择
【解决方案3】:

使用Regex

var containsInt = Convert.ToInt32(Regex.Replace(@"Sanjay 400", @"D", ""));

正则表达式允许您只接受数字并将它们转换为整数。

【讨论】:

  • 这很危险,如果数字大于int会发生什么?,它会产生异常,你应该使用int.TryParse
猜你喜欢
  • 1970-01-01
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
相关资源
最近更新 更多