删除号码时,我有一个包含以下代码的函数:性能问题,从大的字符串
Text = Text.Where(c => !Char.IsDigit(c)).Aggregate<char, string>(null, (current, c) => current + c);
,但它是相当缓慢。无论如何,我可以加快速度吗?
删除号码时,我有一个包含以下代码的函数:性能问题,从大的字符串
Text = Text.Where(c => !Char.IsDigit(c)).Aggregate<char, string>(null, (current, c) => current + c);
,但它是相当缓慢。无论如何,我可以加快速度吗?
试试这个正则表达式:
Text = Regex.Replace(Text, @"\d+", "");
\d+
不仅仅是\d
,因为它一次删除多个连续数字更高效。
是的,你可以使用Regex.Replace
:
Text = Regex.Replace(Text, "\\d", "");
正则表达式一个单一的数字相匹配。 Regex.Replace
将Text
字符串中的每个匹配项替换为空字符串""
。
@TimPietzcker我不确定这两者的相对效率,因为它很大程度上取决于'Replace'函数的实现。 – dasblinkenlight
如果他不需要处理国际数字,'[0-9]'(10个字符)应该更快,因为它覆盖的字符范围要比'\\ d'小(460个字符) – Esailija
@Esailija使(几乎)没有区别。普通表达式引擎中的字符类查找是高度优化的,大约需要O(1),即它独立于字符类中的字符数。其他一切都会使正则表达式先验无法使用。 –
所有这些连接可能会杀死你。最简单的/最好的可能是一个正则表达式:
Text = Regex.Replace(Text, "\\d", "");
或者你可以尝试做只有一个新的字符串实例:
Text = new string(Text.Where(c => !Char.IsDigit(c)).ToArray())
在这里你去朋友:'文本= “”;' – ChaosPandion
是你使用'Char.IsDigit'是因为你需要处理国际数字还是因为你不知道更好? – Esailija
该字符串只包含整数还是小数? – Steve