Java 中的子字符串替换

Substring substitution in Java

我正在尝试创建一个函数,将字符串中的子字符串替换为这两个数组中包含的其他子字符串。

String[] A = {"kk", "pp", "tt", "k", "p", "t", "rt", "lt", "nt", "nk", "mp"};
String[] B = {"k",  "p",  "t",  "",  "v", "d", "rr", "ll", "nn", "ng", "mm"};

我的想法是,如果我有一个仅包含数组 'A' 之一的字符串,则用 'B'.

替换它的等价物(在索引中)

我尝试使用 StringBuilder 的 indexOf,但没有用。我也尝试过一些模式,但我对正则表达式不是很熟悉。您最好的方法是什么?

一个例子;

String s = "auttaa";
myfunction(s);

现在s = "autaa"

一个选项:使用

HashMap<String, String>

As "key" 使用数组 A 中的值;相应的 "value" 来自数组 B。(或者正如其他人所指出的:一个 LinkedHashMap 以防顺序相关)

然后遍历hashmap;并使用 replaceAll 将所有出现的 hashmap.key 替换为 hashmap.value。 ( http://www.tutorialspoint.com/java/java_string_replaceall.htm )

通过这样做,您可以接受诸如 adding/removing 替换规则之类的更改。

使用映射(相对于使用两个数组)的另一个优势是,模式和替换是 "more strongly coupled"。当使用两个数组时,总是存在一定的风险,即由于某些愚蠢的原因,数组在某些时候以不同的长度结束。当然,只有在运行时才可见。但是当你总是成对地指定你的规则时......那么你不能用比替换更多的模式。

使用 hashmap 也可以很容易地 更改 pattern/replacement 规则(只需提供具有其他条目的不同映射)。