英数字を数字のみの文字列に変換する高速/効率的な方法を探しています
例: +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", ""));
これが見つかった別の解決策です
string justNumbers = new String(text.Where(Char.IsDigit).ToArray());
int numbers = Convert.ToInt32(justNumbers);
はい、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]+", ""));
この状況で正規表現を使用しないようにする多くの回答を見た後、実際にこの特定のケースでは正規表現がはるかに高速に機能すると言いたいです。このコードスニペットを使用して実行にかかる時間を計算してみました
によって提案された方法
編集:これらは 2 つの完全に反対の出力を提供します。Visual Studio IDE よりも Ideone を完全に信頼する必要があるかどうかはわかりません。