我有一个下面列出的字符串列表(计数超过5000),这些字符串用等号" ="分隔符,分隔符的左侧是我需要检查另一个字符串结尾的字符串,如果有匹配,那么我需要用字符串的右侧替换它。
,.LLC=LLC
D.E.F.=DEF
&,Aida.=AID
&ECho,MA=ECHO
示例:
HelloD.E.F.
,则应由HELLO DEF
Hello&ECho,MA
,则应由HELLO ECHO
需要找到最有效的方法来完成它。而不是递归地迭代所有字符串。 (有效的时间消耗,内存消耗不是问题。)
答案 0 :(得分:1)
根据您的具体要求,有许多合理的方法可以做到这一点。就个人而言,我根本不会用Java做这件事;我会将您的=
分隔模式转换为sed
替换,例如:
s/,.LLC/LLC/
s/D.E.F./DEF/
s/&,Aida./AID/
s/&ECho,MA/ECHO/
根据确切的字符串,您可能需要进行一些额外的转义;例如\
和(
很特别。一旦你有sed
式的表达式,只需输入你的输入字符串,你就可以得到你想要的字符串:
$ sed -f list_of_patterns.txt list_of_strings.txt
如果您确实需要在Java中执行此操作,则可能需要将替换解析为Map<String, String>
,然后循环遍历字符串,逐个检查地图中匹配的后缀。从最后一个字符开始,然后是最后两个字符,最后三个字符,依此类推。如果找到匹配项,则可以将字符串的其余部分(在匹配的后缀之前)与地图中的相应值连接起来。
这是替换次数的O(1),但是你需要替换的字符串中的字符数为O(n)。