我是Java的初学者,我一直在研究这个难题,但似乎无法做到这一点。 我希望用户输入一个单词,任何单词,并让程序逐个遍历字符串中的字符,如果第一个字符是元音,则接下来的2个字符将被删除。 删除字符后,程序将转到下一个字符并执行相同的测试。如果是元音,则删除下两个,如果没有,只需打印字符然后继续下一个字符。 例如,像'liberty'这样的随机单词将是: 'lirty' 'banana'将改为'禁令'。 '焦糖'变成'来了'。
有没有一种基本而简单的方法来实现这一目标?
提前感谢您的帮助!
亲切的问候 ///马格努斯
答案 0 :(得分:0)
如何解决这个问题的基本思路: 有2例。首字母是元音还是非元音。 这意味着我们需要以下结构
if(isVowel(firstLetter)){
//handle case with first letter a vowel
}else{
//handle other case
}
由于我们希望打印独立于案例的第一个字母,我们可以在if之前执行此操作,以便完成。 然后在这两种情况下,您都可以递归调用该函数。 所以对于元音情况,请将子串从3直到结束。
str.subString(3, str.length()-1);
最后不要忘记边缘情况:如果传入空字符串会发生什么? 或者,如果第一个是元音,但之后只有一个字母? 这导致以下实现:
public void printSpecial(String str){
if(str==null || str.isEmpty()){
return; //No letters to print
}
char firstLetter = str.charAt(0);
System.out.print(firstLetter); //print the current letter
if(isVowel(firstLetter)){
if(str.length()<4){
return; //Not enough letters to continue
}
printSpecial(str.substring(3, str.length()-1));
} else {
if(str.length()==1){
return; //Last letter done
}
printSpecial(str.substring(1, str.length()-1));
}
}
所以剩下要做的就是实现方法
public boolean isVowel(char letter){
}
但是我会把这个留给你:)
答案 1 :(得分:0)
public static void main(String[] args) {
String str = "caramel";
StringBuilder sb = new StringBuilder();
sb.append(str);
System.out.println("Before deletion=" + sb);
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i) == 'a' || sb.charAt(i) == 'e' || sb.charAt(i) == 'i' || sb.charAt(i) == 'o' || sb.charAt(i) == 'u') {
if(i==sb.length()-2)
{//prevent index out of bounds
sb.deleteCharAt(i+1);
}
else if(i==sb.length()-1)
{
//prevent index out of bounds
}
else
{ //delete 2 charaters
sb.deleteCharAt(i+1);
sb.deleteCharAt(i+1);
}
}
}
System.out.println("After deletion=" + sb);
}