java - 使用 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;
}
}
}
}
解决方案
你接近的方式有两个问题。
s.replace('a', 'e');
不会替换字符串中的任何字符,因为String
对象在 Java 中是不可变的。s
仅当您将其分配回as时,它才会替换s = s.replace('a', 'e');
- 以这种方式替换循环中字符串的每个字符的问题是,在每次下一次迭代中,
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);
}
}
推荐阅读
- android - Android:音频的最大音频会话数或效果引擎数?(EQ,REV...)
- c# - 在用户控件中找不到资源字典中的样式
- python - Keras:IndexError:元组索引超出范围 - Conv2D
- wpf - 如何在显示子内容时隐藏父控件?
- android - 无法从 SQLite 数据库中删除一些记录
- dart - Flutter - 关闭小部件时 BLoC 流实例会导致内存泄漏吗?
- docker - Docker 硬件虚拟化与 virtualbox vms 冲突
- python - 使用 2 列和 pandas 中第三列的值创建 dict 的 dict
- php - 如何在 wordpress 管理员和用户端使用相同的对象?
- python - 如何在 Jupyter Notebook 中使用 sklearn 树和 export_graph_viz 调整树的图像大小