Java 如何用replace/regex替换字符串中的两个字符?
我想修改字符串中的两个字符,例如将每个Java 如何用replace/regex替换字符串中的两个字符?,java,regex,string,Java,Regex,String,我想修改字符串中的两个字符,例如将每个'I'更改为'e',将每个'e'更改为'I',这样像“这是一个测试”这样的文本将变成“这是一个测试” 我提出了一个可行的解决方案,但它既无聊又不雅观: String input = "This is a test"; char a = 'i'; char b = 'e'; char[] chars = input.toCharArray(); for(int i = 0; i < chars.length; i++) { if(chars[i
'I'
更改为'e'
,将每个'e'
更改为'I'
,这样像“这是一个测试”
这样的文本将变成“这是一个测试”
我提出了一个可行的解决方案,但它既无聊又不雅观:
String input = "This is a test";
char a = 'i';
char b = 'e';
char[] chars = input.toCharArray();
for(int i = 0; i < chars.length; i++) {
if(chars[i] == a) {
chars[i] = b;
}else if(chars[i] == b) {
chars[i] = a;
}
}
input = new String(chars);
String input=“这是一个测试”;
字符a='i';
字符b='e';
char[]chars=input.toCharArray();
for(int i=0;i
如何使用regex实现这一点?因为我们可以使用Java 9。因此,您可以创建regex,它将搜索i
或e
,当它找到它时,让函数根据找到的值选择替换(如来自map)
演示
Map replacements=Map.ofEntries(
地图条目(“i”、“e”),
地图条目(“e”、“i”)
);
字符串替换=模式。编译(“[ie]”)
.matcher(你的字符串)
.replaceAll((match)->replacements.get(match.group());
但老实说,您的解决方案看起来不错,尤其是当它用于搜索单个字符时。这是一个不如Pschemo优雅的解决方案,但从Java 8开始就可以使用:
static String swap(String source, String a, String b) {
// TODO null/empty checks and length checks on a/b
return Arrays
// streams single characters as strings
.stream(source.split(""))
// maps characters to their replacement if applicable
.map(s -> {
if (s.equals(a)) {
return b;
}
else if (s.equals(b)) {
return a;
}
else {
return s;
}
})
// rejoins as single string
.collect(Collectors.joining());
}
在上调用“这是一个测试”
,它返回:
Thes es a tist
注意
正如其他人提到的,您的解决方案和单字符的解决方案一样好。这是一个非常酷的解决方案,但不幸的是,我使用的是Java 8。我想提醒一下,Java 11将在本月发布。无论如何,在您自己的解决方案中也可以使用map来选择替换,而不是
if
s。我们还可以使用if
smap替换和map(s->replacements.getOrDefault(s,s))
在replacement
没有s
键的情况下返回s
。@feelingwelcome重复是关于交换两个字符(改变它们的位置),而这是关于用不同的字符来改变字符,而替换字符甚至不需要存在于原始字符串中。
Thes es a tist