9

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

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

现有代码是

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

return stringBuilder.ToString();
4

5 回答 5

5

LINQ 解决方案:

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

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

于 2012-04-30T07:03:19.747 回答
4
string str="+123-456/7890";
long onlyNumbers= Convert.ToInt64(Regex.Replace(str, @"\D", ""));
于 2012-04-30T06:38:02.300 回答
2

是的,RegEx 速度更快,您可以使用RegexOptions.Compiled使比较更快,以匹配负/正案例并将它们分开(如果可以存在此类字符串)

例如

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

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

return Convert.ToInt32(numberOnlyRegEx .Replace(str, "[^0-9]+", ""));
于 2012-04-30T06:40:13.803 回答
2

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

string justNumbers = new String(text.Where(Char.IsDigit).ToArray());
int numbers = Convert.ToInt32(justNumbers); 
于 2012-04-30T06:43:10.627 回答
1

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

建议的方法

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

于 2012-04-30T07:15:02.347 回答