2016-03-27 3 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» в качестве вывода. Будут напечатаны как гласные, так и гласные гласные. Я думаю, что я должен заменить string.charAt (i), который является строчной гласной с upperCaseVowel, но я не могу найти какой-либо метод replace() или что-то в этом роде для символов. Я пробовал другие вещи, такие как StringBuilder и т. Д., Но я не нашел решения, которое достаточно просто, чтобы избежать массивов, поскольку я еще не изучил их. Любая помощь в том, как я могу получить правильный результат, высоко оценена. Благодаря!

+0

[Там есть способ заменить] (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

Это еще один отличный способ, о котором я бы даже не подумал, после большой мысли. :П – 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); 
    } 
}