Java重复使用Replace方法

Java重复使用Replace方法,java,Java,我必须用Java编写一个程序,通过切换字母“e”和“o”来替换“Hello,World”中的字母,这样程序的输出将是 “Holle,Werld”。我试图用下面的代码来实现这一点,但我已经意识到所有的o都是e,e仍然是e。我知道e正在覆盖o,但我不知道如何修复。我当前的输出是“Helle Werld”。同样,我想要“Holle,Werld”。谢谢 使用中间符号 import java.util.Scanner; public class E2U7 { public static void m

我必须用Java编写一个程序,通过切换字母“e”和“o”来替换“Hello,World”中的字母,这样程序的输出将是 “Holle,Werld”。我试图用下面的代码来实现这一点,但我已经意识到所有的o都是e,e仍然是e。我知道e正在覆盖o,但我不知道如何修复。我当前的输出是“Helle Werld”。同样,我想要“Holle,Werld”。谢谢


使用中间符号

import java.util.Scanner;

public class E2U7
{
  public static void main(String[] args)
  {
    String river = "Hello, World";
    river = river.replace("e","x");
    river = river.replace("o","e");
    river = river.replace("x","o");
    System.out.print(river);
  }
}

编辑1:
如评论所述,这是一个解决方案,但不是最好的,因为它依赖于输入字符串上可能出现的中间字符。我不会更新我的答案,因为已经发布了更好的方法(请参阅@Thomas Böhm的答案)。

使用中间符号

import java.util.Scanner;

public class E2U7
{
  public static void main(String[] args)
  {
    String river = "Hello, World";
    river = river.replace("e","x");
    river = river.replace("o","e");
    river = river.replace("x","o");
    System.out.print(river);
  }
}

编辑1:
如评论中所述,这是一个解决方案,但不是最好的解决方案,因为它依赖于输入字符串上可能出现的中间字符。我不会更新我的答案,因为已经发布了更好的方法(请参见@Thomas Böhm的答案)。

您可以尝试以下方法:

river = river.replace("e","_");
river = river.replace("o","e");
river = river.replace("_","o");

使用不在输入字符串上的临时字符!

您可以尝试以下操作:

river = river.replace("e","_");
river = river.replace("o","e");
river = river.replace("_","o");

使用不在输入字符串上的临时字符!

您可以在字符串中逐个字符:

public class JavaTestiMain {
public static void main(String[] args)
  {
    String river = "Hello, World";
    StringBuilder sb=new StringBuilder();
    for (char c : river.toCharArray()){
        if(c == 'e'){
            sb.append('o');
        }
        else if (c=='o'){
            sb.append('e');
        }
        else{
            sb.append(c);
        }
    }
    System.out.println(sb.toString());
  }
}
因为你是一个初学者,一个(希望)可以理解的解释:基本上,你在给定的字符串上循环,从第一个符号开始。如果它是一个e,向你的临时解决方案中添加一个o,如果它是一个o,添加一个e,如果它是另一个字符,则添加它。最后从你的StringBuilder中获取最终的字符串。 在这种情况下,您不会将e更改为o的ant,然后将所有更改为e


其他答案的优点是,如果中间符号位于起始字符串中,则不会导致问题。

您可以在字符串中逐个字符:

public class JavaTestiMain {
public static void main(String[] args)
  {
    String river = "Hello, World";
    StringBuilder sb=new StringBuilder();
    for (char c : river.toCharArray()){
        if(c == 'e'){
            sb.append('o');
        }
        else if (c=='o'){
            sb.append('e');
        }
        else{
            sb.append(c);
        }
    }
    System.out.println(sb.toString());
  }
}
因为你是一个初学者,一个(希望)可以理解的解释:基本上,你在给定的字符串上循环,从第一个符号开始。如果它是一个e,向你的临时解决方案中添加一个o,如果它是一个o,添加一个e,如果它是另一个字符,则添加它。最后从你的StringBuilder中获取最终的字符串。 在这种情况下,您不会将e更改为o的ant,然后将所有更改为e


其他答案的优点是,如果中间符号位于起始字符串中,则不会导致问题。

您可以在main方法中替换此代码,因为它可以工作

 String river = "Hello, World";
 String str = river;
river = river.replaceAll("e","*");//o
river = river.replaceAll("o","#");//e
river = river.replaceAll("\\*","o").replaceAll("#","e");
System.out.print(river);

您可以在main方法中替换此代码,它将起作用

 String river = "Hello, World";
 String str = river;
river = river.replaceAll("e","*");//o
river = river.replaceAll("o","#");//e
river = river.replaceAll("\\*","o").replaceAll("#","e");
System.out.print(river);

以下是您试图实现的目标的流版本:

String result = Arrays.stream(river.split(""))
                      .map(c -> c.equals("e")? "o" : c.equals("o")?  "e" : c)
                      .collect(Collectors.joining());

以下是您试图实现的目标的流版本:

String result = Arrays.stream(river.split(""))
                      .map(c -> c.equals("e")? "o" : c.equals("o")?  "e" : c)
                      .collect(Collectors.joining());

一个字符接一个字符,或使用填充字符进行交换。一个字符接一个字符,或使用填充字符进行交换。这不是最好的解决方案…如果字符串包含字母
x
。应避免这样做,因为字符串中可能有“x”。这不是最好的解决方案…如果字符串包含字母
x
。这应该避免,因为字符串中可能有我的“x”,谢谢,但由于对我来说很难,我才开始这样做monday@visiontech60正如对我答案的评论所述,这个答案比我的更受欢迎。@visiontech60添加了一个解释,希望它能有所帮助。谢谢你,但由于我的努力,我才刚刚开始monday@visiontech60正如我的an上的评论所述回答,这个答案比我的更受欢迎。@VisionTech 60添加了一个解释,希望能有所帮助。