例如,如果我有Hello World
,它应该变成Holle Werld
。如何使用String.replace
执行此操作?我尝试做"Hello World".replace("e","o")
,但我只得到Hollo World
,如果再次使用,我会得到Helle Werld
。
答案 0 :(得分:6)
您也可以这样做:
String result = Arrays.stream(input.split(""))
.map(c -> c.equals("e") ? "o" : c.equals("o") ? "e" : c)
.collect(Collectors.joining());
答案 1 :(得分:3)
优化的Java 8解决方案:
String str = "Hello World!";
String result = str.codePoints()
.map(c -> c == 'e' ? 'o' : c == 'o' ? 'e' : c)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
此解决方案避免使用诸如String.replace
,String.split
甚至String.equals
之类的重量级方法。
答案 2 :(得分:2)
我可能在这里将字符串视为字符数组,并对其进行迭代:
String input = "Hello World";
char[] letters = input.toCharArray();
for (int i=0; i < letters.length; ++i) {
if (letters[i] == 'e') {
letters[i] = 'o';
}
else if (letters[i] == 'o') {
letters[i] = 'e';
}
}
String output = new String(letters);
System.out.println(input);
System.out.println(output);
Hello World
Holle Werld
请注意,我们可以在此处尝试使用虚拟字符作为占位符来进行String#replace
。但这冒着占位符作为字符串一部分出现的风险。上述解决方案在所有情况下均适用。
答案 3 :(得分:2)
根据@Carlos Heuberger的建议,您可以使用'\uFFFF'
作为占位符,使用String.replace()
方法将字符彼此交换。'\uFFFF'
被认为是非字符Unicode(即不能出现在字符串中)。
String str = "Hello World";
str = str.replace('o', '\uFFFF').replace('e', 'o').replace('\uFFFF', 'e');
希望有帮助。
答案 4 :(得分:1)
我假设您必须使用replace()
以下是一种方法:
String input = "Hello World";
input = input.replace("e","~");
input = input.replace("o","e");
input =input.replace("~","o);
注意:这假设String中没有"~"
。这段代码不够健壮,无法处理这种情况。
答案 5 :(得分:0)
您还可以找到字符串中不包含的字符或字符组合,并将其用作替换的临时字符串。这是一个示例:
private void funnyReplace2(String myString){
String unused = findUnused(myString);
System.out.println("Unused character(s) used : "+unused);
myString=myString.replace("e",unused);
myString=myString.replace("o","e");
myString=myString.replace(unused,"o");
System.out.println(myString);
}
private String findUnused(String aString){
String lookingForChar = "@#{}]@$^£¨*ù%µ§/.?,;:!&é()-èïô";
int looper = 0;
while(looper<lookingForChar.length()){
looper++;
for (int i =0; i<=lookingForChar.length()-looper; i++){
if (!aString.contains(lookingForChar.substring(i,i+looper)))
return lookingForChar.substring(i,i+looper);
}
}
return "What kind of String do you have ??";
}