替换字符串中的特定字符后的字符/字符,Java

时间:2017-03-24 07:49:50

标签: java string

我是Java的初学者,我一直在研究这个难题,但似乎无法做到这一点。 我希望用户输入一个单词,任何单词,并让程序逐个遍历字符串中的字符,如果第一个字符是元音,则接下来的2个字符将被删除。 删除字符后,程序将转到下一个字符并执行相同的测试。如果是元音,则删除下两个,如果没有,只需打印字符然后继续下一个字符。 例如,像'liberty'这样的随机单词将是: 'lirty' 'banana'将改为'禁令'。 '焦糖'变成'来了'。

有没有一种基本而简单的方法来实现这一目标?

提前感谢您的帮助!

亲切的问候 ///马格努斯

2 个答案:

答案 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);
}