2017-06-22 108 views
1

我必須編寫一個Java程序,通過切換字母'e'和'o'來替換'Hello,World'中的字母,因此程序的輸出將爲 「Holle,Werld 」。我試圖用下面的代碼做到這一點,但已經意識到所有的o都是e,e將會保持e。我知道e是覆蓋o的,但我不知道如何解決。我的電流輸出爲「赫勒Werld」再一次,我想要的。 「赫勒,Werld」 感謝Java重複使用替換方法

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

由字符圍棋字符,或者使用填充字符進行交換。 – Compass

回答

5

您可以通過字符字符串中的字符去:

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,則將o添加到臨時解決方案中,如果它是o,則添加e,如果它是另一個char,則添加它。最後從StringBuilder中獲取最終的String。 在這種情況下,您不要將您的e更改爲o的ant,然後將所有更改爲e。

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

+0

感謝,但用心爲我,我剛開始這個週一 – visiontech60

+0

@ visiontech60這應該是可以避免的,**這* *答案是我的首選。 – luizfzs

+0

@ visiontech60增加了一個解釋,希望它有幫助。 –

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:! 如評論所述,這是一個解決方案,但不是最好的一個,因爲它依賴於一個inter調解可能發生在輸入字符串上的字符。我不會更新我的答案,因爲已經發布了更好的方法(請參閱@ThomasBöhm的答案)。

+1

這不是最好的解決方案...如果字符串包含字母'x'。 –

+0

我忘了這個方法THX – visiontech60

+0

由我回答註釋中規定,因爲可能我「X」的字符串 – uSeruSher

0

你可以嘗試這樣的事:

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

使用臨時字符不是輸入字符串!

0

您可以替換主要方法的代碼,將工作

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

這裏是你要完成的流版本:

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