簡體   English   中英

Java反復使用Replace方法

[英]Java Using the Replace Method repeatedly

我必須用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);
  }
}

您可以在字符串中逐個字符地進行字符轉換:

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

因為您是一個入門者,所以(希望)可以理解的解釋是:基本上,您從第一個符號開始循環遍歷給定的String。 如果它是e,則將a添加到您的臨時解決方案中;如果它是o,則添加一個e;如果它是另一個字符,則添加它。 最后,從您的StringBuilder獲取最終的String。 在這種情況下,您無需將e更改為o的螞蟻,而后將所有更改為e的螞蟻。

其他答案的優點是,如果中間符號位於起始字符串中,則不會引起問題。

使用中間符號

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:如評論中所述,這是一種解決方案,但不是最佳解決方案,因為它依賴於輸入字符串中可能出現的中間字符。 因為已經發布了更好的方法,所以我不會更新我的答案(請參閱@ThomasBöhm的答案)。

這是您要完成的工作的流版本:

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

您可以嘗試這樣的事情:

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

使用不在輸入字符串上的臨時字符!

您可以在主要方法中替換此代碼,它將起作用

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM