【问题标题】:replace vowels with the character following it用后面的字符替换元音
【发布时间】:2016-03-16 18:27:40
【问题描述】:

我正在尝试编写一个 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);
    }

}

【问题讨论】:

  • 两个连续的元音怎么办。喜欢foobar?连续的o应该怎么办?
  • 此外,如果最后一个字母是元音怎么办,例如:hello。最后一个o应该怎么办?
  • 在连续元音的情况下,它只会被它后面的字符替换。这样的 foobar 将是 fobbrr。
  • 如果最后一个字母是元音,我相信它应该什么都不做,因为它后面没有字符。

标签: java string replace


【解决方案1】:

MrFred 的回答很好,但仅适用于元音后跟非元音。更一般的(java)答案是

   myString = myString.replaceAll("[aeiouy](.)","$1$1" );

学习正则表达式,它非常强大。上面的陈述是一种非常简洁的说法:

  1. 匹配项由该范围(元音)中的单个字符组成,后跟包含任何单个字符的子表达式。

  2. 将每个匹配项替换为匹配项中第一个子表达式 ($1) 的两个实例。

【讨论】:

    【解决方案2】:

    这通常是正则表达式有用的任务。这是解决您问题的基本方法:

    s/[aeiouy]([^aeiouy])/$1$1/g
    

    【讨论】:

      【解决方案3】:
      • 使用描述性标识符,例如inputStringoutputStringmyStringtest 之类的东西是不可接受的。

      • 对元音使用String 而不是char[],这样您就可以使用vowels.indexOf( character ) != -1 来检查字符是否为元音,而不是那种冗长的if 语句。

      • 不要循环到字符串的最后;循环直到myString.length() - 1,否则myString.charAt(i+1); 将尝试访问超出字符串末尾的字符。循环完成后,将输入字符串的最后一个字符添加到输出字符串中,而不检查它是否是元音,因为即使是,也没有什么可以替换的。

      • 要解决您的主要问题(未正确构建输出字符串),请考虑以下问题:在循环的每次迭代中,您必须将一个字符附加到输出字符串。你不能只在某些条件下附加一个字符,因为如果你这样做,那么输入字符串中的某些字符将永远不会进入输出字符串。

      【讨论】:

      • 我试图用 test = test + myString.charAt(i+1) 做的事情是试图将字符存储在字符串的下一个索引到元音原来的位置。谢谢你的建议!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2011-10-04
      • 2011-03-23
      • 1970-01-01
      相关资源
      最近更新 更多