vb.net - 删除部分 StringBuilder 的有效方法
问题描述
我有一个正则表达式,它在 stringbuilder 中搜索一些模式:
Dim sb as New StringBuilder(10000) 'some long string builder, filled with text
Dim matches As MatchCollection = myRegex.Matches(sb.ToString())
此外,我需要从 stringbuilder 中删除所有匹配项,并仅返回 stringbuilder 的开头,其中只有可能的文本,不匹配。我知道几种方法可以做到这一点。
1)一次删除所有其余部分:
Dim lenToRemove As Integer = sb.Length - matches(0).Index
sb = sb.Remove(matches(0).Index, lenToRemove)
2)在循环中用空字符串替换每个部分:
For Each m As Match In matches
sb = sb.Replace(m.Value, String.Empty)
Next
3)在循环中删除每个部分,向后:
For i As Integer = matches.Count - 1 To 0 Step -1
sb = sb.Remove(matches(i).Index, matches(i).Length)
Next
sb = sb.Remove(0, matches(0).Index)
此代码是具有数百万次迭代的某些处理的一部分。前两种方法的工作速度明显慢于第三种。例如,4.000.000 次迭代分别需要 101、45、34 秒。
我的问题是为什么第一个解决方案这么慢?是否可以优化此代码?
解决方案
推荐阅读
- python - 在 Tensorflow 中重新格式化张量
- javascript - fetchById 无法在反应中呈现状态,但 console.log 正确呈现状态
- django - 关于 Wagtail 的初学者问题(与 Django 相比)
- javascript - Puppeter 未使用指定的 chrome-profile
- c# - 如何生成 A-2 PDF
- regex - 正则表达式:替换引号,大括号内除外
- javascript - 如何使 axios.get 同步?
- java - 找出数组的第一个或最后一个位置是否有整数“6”
- c - 对矩阵进行冒泡排序以按升序获取一些字符
- excel - 将数据从excel推送到word文档