我正在编写一个标记大文本语料库的搜索应用程序。
文本解析器需要从文本中删除任何乱码(即[^ a-zA-Z0-9])
我脑子里有两个想法如何做到这一点:
1)将文本放入字符串中,使用String.tocharArray将其转换为charArray,然后使用循环运行char by char - > while(position< string.length) 这样做我可以在一次运行中对整个字符串数组进行标记。
2)使用string.replace删除所有非数字/ alpha,然后使用某些分隔符删除string.split,这意味着我必须在整个字符串上运行两次。 一旦删除坏字符然后再拆分它。
我认为,因为#1与#2相同,但在O(n)中它会更快,但在测试两者之后,#2的方式(方式!)更快。
我更进一步,使用red-gate .net反射器查看了String.Strip背后的代码。 它像char一样运行非托管char,但速度要快得多。
我不知道为什么#2比#1快。
有什么想法吗?
答案 0 :(得分:1)
这个想法怎么样:
我不知道这对你已经尝试过的事情是否会更快,但上述时间至少应该回答这个问题。
答案 1 :(得分:0)
djTeller,
#2更快的事实仅仅与您的#1方法有关
您可能想与我们分享您的#1方法;也许它只是非常慢,甚至可以使它比#2快。
是的,两者基本上都是O(n),但是ACTUAL实现O(n);你怎么做#1?
另外,当你说你测试了两者时,我希望你做了大量的输入来克服误差,并看到两者之间的显着差异。