从Java中的另一个字符串列表中替换String的最后一个SubString的最有效方法

时间:2015-12-04 19:12:26

标签: java regex string

我有一个下面列出的字符串列表(计数超过5000),这些字符串用等号" ="分隔符,分隔符的左侧是我需要检查另一个字符串结尾的字符串,如果有匹配,那么我需要用字符串的右侧替换它。

,.LLC=LLC
D.E.F.=DEF
&,Aida.=AID
&ECho,MA=ECHO

示例:

  1. 如果字符串为HelloD.E.F.,则应由HELLO DEF
  2. 替换
  3. 如果字符串为Hello&ECho,MA,则应由HELLO ECHO
  4. 替换

    需要找到最有效的方法来完成它。而不是递归地迭代所有字符串。 (有效的时间消耗,内存消耗不是问题。)

1 个答案:

答案 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)。