Java重复使用Replace方法

时间:2017-06-22 19:23:55

标签: 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 main(String[] args)
  {
    String river = "Hello, World";
    river = river.replace("e","o");
    river = river.replace("o","e");
    System.out.print(river);
  }
}

5 个答案:

答案 0 :(得分:5)

您可以在字符串中使用字符串char:

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,如果是另一个char,则添加它。最后从StringBuilder获取最终的String。 在这种情况下,您不能将您的电子邮件更改为“蚂蚁”,然后将“全部更改为”。

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

答案 1 :(得分:3)

使用中间符号

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);
  }
}

Try it online!

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

答案 2 :(得分:1)

以下是您尝试完成的流程版本:

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

答案 3 :(得分:0)

您可以尝试这样的事情:

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

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

答案 4 :(得分:0)

您可以在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);