Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 替换.txt文件中许多(5000+;)字符串的最有效方法_Java_Regex_String_Optimization_Replace - Fatal编程技术网

Java 替换.txt文件中许多(5000+;)字符串的最有效方法

Java 替换.txt文件中许多(5000+;)字符串的最有效方法,java,regex,string,optimization,replace,Java,Regex,String,Optimization,Replace,使用像Java这样的通用编程语言,在一个20页的文档中搜索,用预定的替换字符串替换5000多个字符串,最有效的方法是什么?程序不应替换任何已被替换的字符串。什么样的数据结构最适合存储5000多个字符串及其每个替换项—两个数组、一个字典或其他什么 以下是我迄今为止考虑过的一些选择: 使用string.replace对每个字符串遍历整个.txt文档一次。问题是,对于存储的每个字符串,算法必须在整个.txt文档中迭代额外的时间 根据需要替换字符串,同时通过附加替换创建新字符串,在.txt中迭代一次。

使用像Java这样的通用编程语言,在一个20页的文档中搜索,用预定的替换字符串替换5000多个字符串,最有效的方法是什么?程序不应替换任何已被替换的字符串。什么样的数据结构最适合存储5000多个字符串及其每个替换项—两个数组、一个字典或其他什么

以下是我迄今为止考虑过的一些选择:

  • 使用string.replace对每个字符串遍历整个.txt文档一次。问题是,对于存储的每个字符串,算法必须在整个.txt文档中迭代额外的时间

  • 根据需要替换字符串,同时通过附加替换创建新字符串,在.txt中迭代一次。这似乎效率更高,但每一步都需要检查整个5000+字符串集是否有要替换的字符串

是否有更优化的方法来解决此问题,或者上述尝试之一已经是最优的


此外,是否有可能在较低级别的语言(如C)中更高效地运行此算法?

我将使用commons lang库,我认为它正是您所需要的。基本上,创建一个包含所有要替换的字符串的数组和另一个包含替换的数组。有关StringUtils#replaceach方法的详细信息,请参阅。

您希望替换5000个字符串中的某些字符串,并使其达到最佳状态。。。现在我想问你的问题是:如果你不读字符串,你怎么知道你是否必须替换它?这是不可能的,你必须阅读所有的东西。要做到这一点,最短的方法是一行一行地去做,并立即更换。如果我错了,有人可以纠正我,但读取文件是最基本的操作之一,因此使用库来实现这一点,除了编程语言中默认可用的功能外,对我来说似乎完全是过火了。此外,每种语言都有基本的io,如果没有,就不要使用它

要存储字符串,这完全取决于您想用它们做什么。不同的数据结构有不同的用途,有些数据结构比其他数据结构更适合于某些情况。如果您只需要存储它们,那么一个简单的数组就可以了。但是,如果你需要更高级的功能,那么你需要考虑你的选择。但这一切都取决于你以后想用它们做什么。 还有内存问题,您需要计算5000+字符串将占用多少内存,因为您可能会耗尽内存。然后你需要考虑是否值得使用这些记忆


最后是关于C的问题,当然它会更有效。Java在虚拟机中运行,这会增加相当大的开销。因此,基本上您的Java程序在另一个Java程序中运行,如果您知道每一个操作都有成本,那么您就知道C在性能方面比Java更高效。

向我们展示您尝试过的代码。20页和5000个字符串并不是那么多。您现在使用的代码有什么问题?使用
ProcessBuilder
让程序调用
sed
???(好的,这是老的Linux程序员的解决方案…)实际上,使用CWell任何东西都会运行得更好。这里有一个技巧,编写算法,然后进行优化。我仍然不知道为什么你需要通行证来替换strings@AlexBoulton当前位置redFIVE说了什么。编写一些代码,在您想到它们时进行明显的优化。也就是说,
StringBuilder
在这里可能是最好的。然后测量结果。如果足够快,你就完了。如果没有,请回到这里,询问一个比代码更好的方法。请准备好向我们展示足够多的代码,以便我们了解您所做的工作。这里存在的问题是,在提出问题之前不实际编写任何代码,所以只需在
hashmap
中放入5000个字符串,您就可以golden@redFIVE我只是说他应该考虑大小和内存的可用性。此外,,有些数据结构具有不同的复杂性,这可能会使它们在处理更多或更少的数据时效率更高或更低。我认为您很难找到一种更有效的方法,从5000个可能未排序的条目中查找字符串,而不是将其全部放入hashmap@redFIVE仅当整个输入字符串应该与5000个字符中的一个匹配时可能性。如果他在寻找输入字符串的子字符串与一个可能的搜索字符串相匹配的情况(我就是这样理解这个问题的),hashmap就没有用处了。