使用像Java这样的通用编程语言,搜索~20页文档以用一些预定的替换字符串替换一组5000+字符串的最有效方法是什么?该程序不应替换已经替换的任何字符串。什么数据结构最适合存储5000多个字符串及其每个替换 - 两个数组,一个字典或其他什么?
以下是我到目前为止所考虑的一些选项:
使用string.replace对每个字符串迭代整个.txt文档一次。问题是算法必须在整个.txt文档中迭代存储的每个字符串的额外时间。
在通过追加替换创建新字符串时,根据需要替换字符串时,迭代.txt一次。这似乎更有效,但每个步骤仍然需要检查整个5000+字符串集,以便替换任何字符串。
是否有更优化的方法来解决这个问题,或者上述尝试之一已经是最优的?
此外,是否可以在较低级别的语言(如C?
)中更有效地运行此算法答案 0 :(得分:2)
你想要替换5000个字符串中的一些字符串并且你想让它变得最佳......现在我的问题是:如果你不读字符串,你怎么知道你是否必须替换一个字符串?这是不可能的,你必须阅读所有内容。最简单的方法是逐行进行并立即替换。如果我错了,有人可以纠正我,但是阅读文件是最基本的操作之一,所以使用库除了默认情况下编程语言中可用的内容似乎对我来说太过分了。此外,每种语言都有基本的io,如果它没有,那么就不要使用它。
要存储字符串,这一切都取决于您想要对它们执行的操作。不同的数据结构有不同的目的,有些在某些情况下比其他情况更适合。如果你只需要存储它们,那么一个简单的数组就可以了。但是,如果您需要更高级的功能,则需要考虑您的选择。但是,这完全取决于你以后想要做些什么。 并且存在内存问题,您需要计算5000+字符串将占用多少内存,因为您可能会耗尽内存。然后你需要考虑使用所有内存是否值得。 check this link
最后你关于C的问题,当然会更有效率。 Java在虚拟机中运行,增加了相当大的开销。所以基本上你的Java程序在另一个Java程序中运行,如果你知道每一个操作都有成本,那么你就会明白在性能方面C会比Java更高效。
答案 1 :(得分:0)
我会使用commons-lang库,我认为它正是您正在寻找的。基本上,您创建一个包含要替换的所有字符串的数组,以及另一个包含替换的数组。有关StringUtils#replaceEach方法的详细信息,请参阅http://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html。