用后面的字符替换元音

时间:2015-12-10 23:08:55

标签: java string replace

我正在尝试编写一个Java程序,在该程序中,它接受输入并用其后面的字符替换所有元音。

例如:

starcraft --> strrcrfft
parker --> prrkrr

这是我到目前为止所拥有的。

import java.util.Scanner;

public class Vowelconverter {

    public static void main(String[] args) {

        Scanner myInput = new Scanner(System.in);
        System.out.println("Enter your string here: ");
        String myString = myInput.nextLine();
        String test = "";
        char vowels [] = {'a','e','i','o','u'};

        for (int i = 0; i <= myString.length(); i++){
            if (myString.charAt(i) == vowels[0] || myString.charAt(i) == vowels[1] || myString.charAt(i) == vowels[2] || myString.charAt(i) == vowels[3] || myString.charAt(i) == vowels[4]){       
                test = test + myString.charAt(i+1);
            }   
        }


        System.out.println(myString);
        System.out.println(test);
    }

}

3 个答案:

答案 0 :(得分:1)

这通常是正则表达式有用的任务。这是解决问题的基本方法:

s/[aeiouy]([^aeiouy])/$1$1/g

答案 1 :(得分:0)

  • 使用描述性标识符,例如inputStringoutputString; myStringtest之类的内容是不可接受的。

  • 使用String作为元音而不是char[],这样您就可以vowels.indexOf( character ) != -1检查字符是否为元音,而不是loooooong {{ 1}}陈述。

  • 不要循环直到字符串的最后;循环直到if,否则myString.length() - 1将尝试访问字符串末尾之外的字符。循环完成后,将输入字符串的最后一个字符添加到输出字符串中,而不检查它是否是元音,因为即使它是,也没有什么可以替换它。

  • 要解决您的主要问题(不正确构建输出字符串),请考虑以下事项:在循环的每次迭代中,您必须在输出字符串中附加一个字符。你不能只在某些条件下附加一个字符,因为如果你这样做,那么输入字符串中的一些字符将永远不会出现在输出字符串中。

答案 2 :(得分:0)

MrFred的答案很好,但只适用于元音后跟非元音。更一般的(java)答案是

   myString = myString.replaceAll("[aeiouy](.)","$1$1" );

学习正则表达式,它非常强大。上面的陈述是一种非常简洁的说法:

  1. 匹配包含此范围内的单个字符(元音),后跟包含任意单个字符的子表达式。

  2. 将每个匹配替换为匹配中第一个子表达式($ 1)的两个实例。