2016-03-27 67 views
0

我正在自學Java並練習使用在線練習。我只學到了直到迄今爲止使用數組進行此練習的方法超出我的範圍,即使在線使用幾個解決方案使用數組來做我想做的事情。Java用字符替換字符

練習是這樣的:讓用戶用元音輸入一個字符串。無論哪裏出現元音字母,都會將該元音顯示爲大寫字母。

例如:如果用戶輸入「蘋果」,正確的輸出是蘋果

我到目前爲止這樣的代碼:

import java.util.Scanner; 

public class CapitalizeVowels { 
    public static void main(String[] args) { 
     Scanner keyboard = new Scanner(System.in); 

     System.out.print("Enter a string ~ "); 
     String string = keyboard.nextLine(); 

     for (int i = 0; i < string.length(); i++) { 
      System.out.print(string.charAt(i)); 
      if (string.charAt(i) == 'a' || 
       string.charAt(i) == 'e' || 
       string.charAt(i) == 'i' || 
       string.charAt(i) == 'o' || 
       string.charAt(i) == 'u') { 

       char upperCaseVowel = Character.toUpperCase(string.charAt(i)); 
       System.out.print(upperCaseVowel); 

       // need to replace string.charAt(i) with upperCaseVowel 
       // find something to replace characters 
      } 
     } 
    } 
} 

當我運行我的代碼,因爲它是與輸入字符串「蘋果」,例如,我得到「aAppleEs」作爲我的輸出。正在打印小寫元音和大寫元音。我想我應該用upperCaseVowel來代替string.charAt(i),它是小寫的元音,但是我找不到任何replace()方法或者某種特殊效果。我嘗試了其他的東西,比如StringBuilder等,但是我還沒有遇到一個簡單的解決方案,以避免數組,因爲我還沒有學習它們。任何幫助我如何能得到正確的輸出是高度讚賞。謝謝!

+0

[There's a replace method](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replace%28char,%20char%29)。 – resueman

+1

不要在$ i^{th} $位置打印字符,直到檢查它是否爲元音。 – user2505282

回答

2

你只需要到Sysout之前if聲明移到else,以避免打印相同的字符兩次,例如:

public static void main(String[] args) { 
    Scanner keyboard = new Scanner(System.in); 

    System.out.print("Enter a string ~ "); 
    String string = keyboard.nextLine(); 

    for (int i = 0; i < string.length(); i++) { 

     if (string.charAt(i) == 'a' || string.charAt(i) == 'e' || string.charAt(i) == 'i' || string.charAt(i) == 'o' 
       || string.charAt(i) == 'u') { 

      char upperCaseVowel = Character.toUpperCase(string.charAt(i)); 
      System.out.print(upperCaseVowel); 

      // need to replace string.charAt(i) with upperCaseVowel 
      // find something to replace characters 
     }else{ 
      System.out.print(string.charAt(i)); 
     } 
    } 
} 
+0

啊!我懂了。我正確地完成了算法,但沒有按照邏輯打印......謝謝! – camelCoder

3

你的錯誤就是測試它是否是一個元音之前打印的每一個字符。

取而代之,打印每個字符後,你已經知道它應該是什麼。你的循環的主體應該是:

char next = string.charAt(i); 
if (next == 'a' || 
    next == 'e' || 
    next == 'i' || 
    next == 'o' || 
    next == 'u') { 
    next = Character.toUpperCase(next); 
} 
System.out.print(next); 

也可以考慮添加:

else { 
    next = Character.toLowerCase(next); 
} 

要強制執行非元音字母是小寫。

+0

這是另一個偉大的方式,我不會想到,直到經過深思熟慮。 :P – camelCoder

0

試試這個,它對我有用。

class ReplaceVowel { 

    public static void main(String[] args) { 
     String words = "apples"; 
     char converted = 0; 
     String w = null; 
     for (int i = 0; i < words.length(); i++) { 
      if (words.charAt(i) =='a'|| words.charAt(i)=='e'||words.charAt(i)=='i'||words.charAt(i)=='o'||words.charAt(i)=='u') { 
       converted = Character.toUpperCase(words.charAt(i)); 
       w = words.replace(words.charAt(i), converted); 
       words = w; 

      } else { 
       converted = Character.toUpperCase(words.charAt(i)); 
       w = words.replace(words.charAt(i), converted); 
       words = w; 
      } 
     } 
     System.out.println(words); 
    } 
}