字母数字仅限数字

时间:2012-04-30 06:35:53

标签: c# .net

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

e.g。 + 123-456 / 7890变为1234567890等。

现有代码

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

return stringBuilder.ToString();

5 个答案:

答案 0 :(得分:5)

LINQ解决方案:

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

是RegEx在其他方面更快,你可以使用 RegexOptions.Compiled 来更快地进行比较以匹配负面/正面情况并将它们分开(如果这样的字符串可以存在)

e.g。

Regex numberOnlyRegEx = new Regex(@"[^0-9]+", RegexOptions.Compiled);

if (!numberOnlyRegEx.IsMatch(str))
  return 0; //default value;

return Convert.ToInt32(numberOnlyRegEx .Replace(str, "[^0-9]+", ""));

答案 3 :(得分:2)

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

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

答案 4 :(得分:1)

在看到许多在这种情况下试图不使用正则表达式的答案后,我想说实际上Regex在这种特殊情况下工作得更快。我尝试使用this code snippet

计算执行时间

建议的方法

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