2016-11-02 130 views
-5

因此,我替換字符時遇到問題,但找到它們已完成。我的問題是,而不是複製只有一個代碼複製多個。如何在java中替換字符串中的特定字母?

String NewText = ""; 
for(int i=0; i<Str.length(); i++) { 
    if(Str.charAt(i) == 'a') { 
     counter++; 
     String newText = Str.replace('a', '@'); 
     NewText=newText; 
    } else if(Str.charAt(i) == 'e') { 
     counter1++; 
     String newText1 = Str.replace('e','3'); 
     NewText=NewText+newText1; 
    } 
} 

System.out.println("Total vowels: "+counterTotal+" | "+counter5+ " y's"); 
System.out.println(NewText+" | Original text: "+Str); 

我的問題是NewText變量保存所有的文本,而不僅僅是改變後的字母。通過試驗和錯誤,我將不勝感激任何幫助改善這個代碼,使其正常工作。想象一下其他的代碼,它只是替換元音aeiou,但我怎麼能讓我的代碼也檢查大寫字母而不復制粘貼?

+1

爲什麼你甚至循環?只需使用'replace'即可。 – Carcigenicate

+3

在附註中,同時使用'newText'和'NewText'是非常糟糕的做法。 – Aaron

+0

你想要做什麼,你有櫃檯,所以你想要一個一個地替換字符? – AxelH

回答

-2
public static void main (String[]args){ 

    String Str = "AEAEA"; 
    int counter = 0; 
    int counter1 = 0; 
    String NewText = null; 
    for (int i = 0; i < Str.length(); i++) { 
     if (Str.charAt(i) == 'A') { 
      counter++; 
      String newText = Str.replace('A', '@'); 
      System.out.println(newText); 
      NewText = newText; 

     } else if (Str.charAt(i) == 'E') { 
      counter1++; 
      String newText1 = Str.replace('E', '3'); 
      NewText = NewText + newText1; 
     } 

    } 
    System.out.println("Nw " + NewText); 
    //System.out.println(NewText+" | Original text: "+Str); 

} 
+1

提示:只是丟棄沒有任何**解釋的代碼不是一個好主意。尤其是當你的輸入格式非常糟糕以至於其他人覺得需要編輯新的答案! – GhostCat

+0

在循環內調用replace函數沒有意義。爲每封信一次調用它將做替換。 –

+0

@GhostCat哪一部分應該解釋? – Rumado

0

你應該試試這個:

public static void main(String[] args) { 
    String testStr = "TEST"; 
    int count = count(testStr,'T'); 
    String newStr = testStr.replaceAll("T", "3"); 
    System.out.println("Total T: " + count); 
    System.out.println("Old:" + testStr +" | New: "+newStr); 
} 

public static int count(String str, char letter){ 
    int counter = 0; 
    for(int i=0; i<str.length(); i++) { 
     if(Character.toUpperCase(str.charAt(i)) == Character.toUpperCase(letter)) { 
      counter++; 
     } 
    } 
    return counter; 
} 

方法count將計算給定的字母在給定的STR多少次appers。儘管字母大小寫,我們稱該toUpperCase爲if。現在您正在重新使用其他字母的代碼,您不需要重複您的for循環,只需調用該方法即可。在主要方法中,我們調用count,之後我們使用replaceAll替換該字母,替換給定參數的字符串中的所有字符。 String類是不可變的,所以它返回一個新的String。這裏是輸出:

Total T: 2 
Old:TEST | New: 3ES3 

這解決了你的問題吧?

+1

如果使用Java 8,你也可以改變你的計數函數來使用函數式......'return str.chars()。filter(num - > num == letter).count();'但是,返回類型將是一個長而不是int。 –

+1

是的,這是一個很好的選擇! – BrunoDM

相關問題