仅限字母数字到数字

本文关键字:数字 | 更新日期: 2023-09-27 18:32:35

寻找将字母数字转换为纯数字字符串的快速/有效方法

例如 +123-456/7890 变为1234567890等。

现有代码是

foreach(char c in str.ToCharArray() )
  if ( char.IsDigit(c) ) stringBuilder.Append(c);
return stringBuilder.ToString();

仅限字母数字到数字

LINQ 解决方案:

return new string(str.Where(char.IsDigit).ToArray());

不确定它是否更有效;至少它不是正则表达式!

string str="+123-456/7890";
long onlyNumbers= Convert.ToInt64(Regex.Replace(str, @"'D", ""));
是的,

RegEx 在其他方面更快,您可以使用 RegexOptions 使比较更快。

例如

Regex numberOnlyRegEx = new Regex(@"[^0-9]+", RegexOptions.Compiled);
if (!numberOnlyRegEx.IsMatch(str))
  return 0; //default value;
return Convert.ToInt32(numberOnlyRegEx .Replace(str, "[^0-9]+", ""));

这是找到的另一种解决方案

string justNumbers = new String(text.Where(Char.IsDigit).ToArray());
int numbers = Convert.ToInt32(justNumbers); 

在看到许多在这种情况下尽量不使用正则表达式的答案之后,我想说实际上正则表达式在这种特殊情况下工作得更快。我尝试使用此代码片段计算执行所需的时间

建议的方法

  • 伊姆兰·里兹维采取 1291 刻度 Ideone 说时间: 0.06s 内存: 36992 kB
  • 查克·诺里斯采取 1336 滴答声 Ideone 说时间: 0.06s 内存: 37080 kB
  • 安迪12866 滴答声 Ideone 说时间: 0.04s 内存: 36888 kB
  • 冷告诉需要 18855 滴答声; 时间: 0.03s 内存: 36904 KB

编辑:这些给出了两个完全相反的输出,我不知道我们是否应该完全信任Ideone而不是Visual Studio IDE。