用星号代替元音

时间:2014-11-30 02:00:49

标签: java string

我有一项任务,我必须使用用户输入的名称并将元音转换为星号。我在下面的代码中有一部分(正如你在下面的代码中看到的那样),但还有另一部分:如果输入的字符串具有偶数字符,则第一个字符串之间应该有两个而不是一个空格和姓氏。如果它很奇怪,它应该只有一个。我试图用if-else语句实现它,但它无法正常工作。

帮助将不胜感激。谢谢。

    import java.util.*;
    import java.io.*; // necessary for user input

    public class Prog510a
    {
      public static void main(String[] args)
      {
       Scanner input = new Scanner(System.in);
       System.out.print("Enter your name: ");
       String word = input.nextLine();

       int length = word.length();
       String space = "";
       for(int count = 0; count < word.length(); count ++)
       {
           char c = word.charAt(count);
           if(c == 'a' || c == 'A' || c == 'e' || c == 'E' || c == 'i' || c == 'I' || c == 'o' || c == 'O'
           || c == 'u' || c == 'U')
           {
            String front = word.substring(0, count);
            String back = word.substring(count + 1);
            word = front + "*" + back;
           }
       }
        if (length % 2 == 0)
        {
          space = "  ";
        }
        else
        {
          space = " ";
        }

       System.out.println(word);
      }

} 

3 个答案:

答案 0 :(得分:2)

好吧,您可能希望先将全名拆分为姓氏和名字。这可以使用split函数来完成,该函数返回一个String数组:

string[] firstAndLastNames = word.split(" ");

这当然可以在你更换元音之后完成,但不一定是这样。

然后你只需得到全名的长度,并适当地分配给space变量:

if ((firstAndLastNames[0].length() + firstAndLastNames[1].length()) % 2 == 0)
    space = "  ";
else
    space = " ";

然后在输出时,执行以下操作:

System.out.println(firstAndLastNames[0] + space + firstAndLastNames[1]);

我还建议用星号替换元音的更好方法,因为它非常混乱。创建一个元音数组可能会更好,并使用equalsIgnoreCase函数替换:

string[] vowels = {"a","e","i","o","u"};
for (int i = 0; i < vowels.length; i++}
    for (int j = 0; j < word.length; j++)
        if (word[j].equalsIgnoreCase(vowel[i]))
            word[j] = "*";

由于您尚未学习数组,因此您可以使用字符串replace函数将空格替换为一个或两个空格,具体取决于长度,如:

if (word.length() % 2 == 0)
    word = word.replace(" ","  ");

你不需要检查它是否奇怪,因为它已经有1个空格,这就是你想要的。

答案 1 :(得分:2)

这是一个较短的版本:

public class NameVowelsToAsterisks{

    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.print("Enter your name: ");
        String word = input.nextLine();

        String astWord = word.replaceAll("[AEIOUYaeiouy]", "*");  //changing to asterisks

        String spaceWord = new String();
        if (astWord.length() % 2 == 0) {
            int spacePos = astWord.indexOf(' ');    //finding position of space
            spaceWord = new StringBuilder(astWord).insert(spacePos, " ").toString(); //adding space if needed
        } else spaceWord = astWord;

        System.out.println(spaceWord);  //printing result
}

答案 2 :(得分:1)

首先我认为你应该使用替换而不是使用那个大丑陋的循环。

教程:java string replace example

文档:java api:在这一篇中查找方法replace,replaceAll,replaceFirst

希望这有帮助