0

我有一个必须在字符串中替换的字符串映射(对的集合)。

例如,如果我有 map{ {"foo", "foo2"}, {"bar", "bar2"} } 字符串的最终结果"foo barman football bar"应该是:"foo2 bar2man foo2tball bar2"

已经有很多问题/答案,但没有一个提到这里最大的问题。如果地图有“圆形”替换{ {"foo", "bar"}, {"bar", "foo"} } ,结果应该是:"bar fooman bartball foo".

另一个问题可能是{ {"foo", "fo"}, {"fo", "f"} }

该算法应该只替换一次实例。

很抱歉没有提供 SSCCE ...我仍在寻找解决方法。


选项1:

按键大小(降序)对地图进行排序 - 这将消除包含问题。

然后基于来自经典交换方法的想法。浏览地图并用独特的东西替换所有出现的键。在我的情况下?,不能将?1第一个键?2用于第二个键等。

现在在第二遍替换?1为值 1、?2值 2 等。

缺点: 1. 您必须有简单的方法来定义与任何键或值都不匹配的交换键。2. 似乎性能昂贵

选项 2:

创建一个通用匹配模式say ((key1|key2|key3...)(.*?))*。枚举匹配项,并为每个键匹配用值替换键。重新生成结果。

缺点: 1. 创建匹配树可能会耗费大量内存 2. 准备通用模式可能很麻烦

4

0 回答 0