寻找将字母数字混合字符串转换为仅包含数字的快速/高效方法
例如,+123-456/7890 变成 1234567890 等。
现有代码如下:
foreach(char c in str.ToCharArray() )
if ( char.IsDigit(c) ) stringBuilder.Append(c);
return stringBuilder.ToString();
寻找将字母数字混合字符串转换为仅包含数字的快速/高效方法
例如,+123-456/7890 变成 1234567890 等。
现有代码如下:
foreach(char c in str.ToCharArray() )
if ( char.IsDigit(c) ) stringBuilder.Append(c);
return stringBuilder.ToString();
return new string(str.Where(char.IsDigit).ToArray());
不确定是否更高效;至少它不是正则表达式!
string str="+123-456/7890";
long onlyNumbers= Convert.ToInt64(Regex.Replace(str, @"\D", ""));
Int32.MaxValue = 2147483647
,请使用 Convert.ToInt64(...);它可以给出高达 Int64.MaxValue = 9223372036854775807
的结果。 - MarshalRegex 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);
在看到许多回答试图不在这种情况下使用正则表达式之后,我想说实际上在这种特定情况下,正则表达式的速度要快得多。我尝试使用this code snippet计算执行所需的时间。
建议的方法由
编辑:这些结果给出了两个完全相反的输出,我不知道我们是否应该完全信任Ideone而不是Visual Studio IDE。