我正在尝试编写一个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);
}
}
答案 0 :(得分:1)
这通常是正则表达式有用的任务。这是解决问题的基本方法:
s/[aeiouy]([^aeiouy])/$1$1/g
答案 1 :(得分:0)
使用描述性标识符,例如inputString
和outputString
; myString
和test
之类的内容是不可接受的。
使用String
作为元音而不是char[]
,这样您就可以vowels.indexOf( character ) != -1
检查字符是否为元音,而不是loooooong {{ 1}}陈述。
不要循环直到字符串的最后;循环直到if
,否则myString.length() - 1
将尝试访问字符串末尾之外的字符。循环完成后,将输入字符串的最后一个字符添加到输出字符串中,而不检查它是否是元音,因为即使它是,也没有什么可以替换它。
要解决您的主要问题(不正确构建输出字符串),请考虑以下事项:在循环的每次迭代中,您必须在输出字符串中附加一个字符。你不能只在某些条件下附加一个字符,因为如果你这样做,那么输入字符串中的一些字符将永远不会出现在输出字符串中。
答案 2 :(得分:0)
MrFred的答案很好,但只适用于元音后跟非元音。更一般的(java)答案是
myString = myString.replaceAll("[aeiouy](.)","$1$1" );
学习正则表达式,它非常强大。上面的陈述是一种非常简洁的说法:
匹配包含此范围内的单个字符(元音),后跟包含任意单个字符的子表达式。
将每个匹配替换为匹配中第一个子表达式($ 1)的两个实例。