首页 > 解决方案 > 使用 switch 语句将字符串中的每个元音替换为以下元音

问题描述

我是编程和学习 Java 的新手。我正在努力让这个 switch 语句与替换字符串中的元音然后打印新字符串一起工作。我一直在用 ChangeV 找不到符号。另外,不确定如何遍历字符串以检查元音,然后替换每个元音。我想从用户那里得到输入,但又不清楚如何正确合并。谢谢你的帮助!

public class Main{

    public static void main(String args[]){


    //Scanner myScanner = new Scanner(System.in);
    //String s = myScanner.next();
    ChangeV v = new ChangeV();

    System.out.println(v.ChangeV());

}


public void ChangeV(){


String s = "aeiou";
char [] vowels ={'a', 'e' ,'i', 'o','u'};

// I believe I would need a for loop 

switch (//not sure what goes here) {
    case'a' :

    s.replace('a', 'e');

    break;

    case 'e' :

    s.replace('e', 'i');


    break;

    case 'i' :

    s.replace('i', 'o');


    break;

    case 'o' :

    s.replace('o', 'u');

    break;


    case 'u' :

    s.replace('u', 'a');


    break;
}

}
    }

}

标签: javaswitch-statement

解决方案


你接近的方式有两个问题。

  1. s.replace('a', 'e');不会替换字符串中的任何字符,因为String对象在 Java 中是不可变的。s仅当您将其分配回as时,它才会替换s = s.replace('a', 'e');
  2. 以这种方式替换循环中字符串的每个字符的问题是,在每次下一次迭代中,replace如果匹配该字符,它甚至会替换任何过去的字符。所以本质上,“aeiou”最后会变成“aaaaa”,因为在最后一个字符处,你会s = s.replace('u', 'a');用 . 替换每个字符a

因此,要替换字符串中的字符,下面是一种更好的方法:

public static void main(String[] args){

    String oldString = "aeiou";
    char[] characters = oldString.toCharArray();

    for (int i = 0; i < characters.length; i++) {
        switch (characters[i]) {
            case 'a':
                characters[i] = 'e';
                break;
            case 'e':
                characters[i] = 'i';
                break;
            case 'i':
                characters[i] = 'o';
                break;
            case 'o':
                characters[i] = 'u';
                break;
            case 'u':
                characters[i] = 'a';
                break;
            default:
                break;
        }
    }

    String newString = String.valueOf(characters);
    System.out.println(oldString);
    System.out.println(newString);
}

如果您想用用户输入的任何字符串替换元音,您可以使用Scanner通过控制台读取用户的输入,它可以实现如下。

public class Main {

    public static void main(String[] args){

        Scanner scanner = new Scanner(System.in);
        String oldString = scanner.next();

        String newString = changeVowels(oldString);

        System.out.println(newString);
        scanner.close();

    }

    private static String changeVowels(String oldString) {
        char[] characters = oldString.toCharArray();

        for (int i = 0; i < characters.length; i++) {
            switch (characters[i]) {
                case 'a':
                    characters[i] = 'e';
                    break;
                case 'e':
                    characters[i] = 'i';
                    break;
                case 'i':
                    characters[i] = 'o';
                    break;
                case 'o':
                    characters[i] = 'u';
                    break;
                case 'u':
                    characters[i] = 'a';
                    break;
                default:
                    break;
            }
        }

        return String.valueOf(characters);
    }
}

推荐阅读