用Java中的单词打印元音

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Java中的单词打印元音相关的知识,希望对你有一定的参考价值。

我是java的初学者,我正在做这个课程需要一些帮助。基本上,用户将输入一个字符串,然后程序将只打印一行上的元音。

import java.util.Scanner; 

class Main {
  public static void main(String[] args) {
    Scanner inp = new Scanner(System.in);
    System.out.print("In:");
    String word = inp.nextLine();
    //write your code below
    for(int whatsat = 0; whatsat < word.length(); whatsat++){
      if (word.charAt(whatsat).equals("a")){  //how to declare mutiple letters?
        System.out.print(word.charAt(whatsat));
      }

  }
}
}
答案

我同意@Logan。你不使用equals()来比较原始类型值(int,char,boolean等),只需使用简单的==表达式。

import java.util.Scanner; 

class Main {
  public static void main(String[] args) {
    Scanner inp = new Scanner(System.in);
    System.out.print("In:");
    String word = inp.nextLine();
    //write your code below
    for(int whatsat = 0; whatsat < word.length(); whatsat++){
      char c = Character.toLowerCase(word.charAt(whatsat));
      if (c == 'a' || c == 'e'|| c == 'i' || c == 'o' || c == 'u'){
        System.out.print(word.charAt(whatsat));
      }

  }
}
}
另一答案

一个简单的方法(故意避免使用复杂的正则表达式选项)将在循环中使用String.indexOf()方法。

在下面的例子中,我们基本上检查“AEIOUaeiou”是否包含我们从用户输入中提取的char。如果是这样,我们提取它:

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

    //write your code below

    // This will hold any matching vowels we find
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < word.length(); i++) {

        // Check if our list of vowels contains the current char. If the current char exists in the String of vowels, it will have an index of 0 or greater.
        if ("AEIOUaeiou".indexOf(word.charAt(i)) > -1) {

            // If so, add it to our StringBuilder
            sb.append(word.charAt(i));
        }
    }

    // Finally, print the result
    System.out.println(sb.toString());

}

结果:

测试输入“这是我的测试输入。它有用吗?”输出是:iieiuiio

另一答案

所以这里有两个问题:

  1. 字符与字符串的比较不同。
  2. 检查多个字符。

要比较字符,请执行以下操作:

if (word.charAt(whatsat) == 'a') {
    ...
}

注意单引号! 'a'不是"a"

如果你问“为什么字符串和字符的比较不同?”,这是一个很好的问题。我其实不知道原因,所以我们都应该研究它。继续。

要检查多个字符:

for(int whatsat = 0; whatsat < word.length(); whatsat++){
    if (word.charAt(whatsat) == 'a' || word.charAt(whatsat) == 'e' || word.charAt(whatsat) == 'i'){
        System.out.print(word.charAt(whatsat));
    }
  }

请注意,如果您输入的是大写字母,则需要:

  • 将您的输入转换为小写,这样您就可以检查小写字母,或
  • 在if语句中明确检查大写字母,例如
if (...word.charAt(whatsat) == 'A' ...)

长期来看,你会想要像评论中提到的阿德里安那样研究正则表达式。初学者可能会很复杂,但如果你有兴趣,你应该调查一下。

希望这可以帮助。

另一答案

我真的很惊讶没有人建议使用Enums ...在我看来,最干净的方式和最简单的方式。

只需使用所有元音定义一个枚举,浏览字符串并将每个字符与Enum,ignoring the case中的值进行比较 - 注意char的演员阵容到String。如果它存在于枚举中,请将其打印出来。

public class VowelFind  {

    enum Vowels {
        A, E, I, O, U
    }

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

        for (int i = 0; i < word.length(); i++) { //loop through word
            for (Vowels v : Vowels.values()) { //loop through Enum values
                if((word.charAt(i)+"").equalsIgnoreCase(v.name())) { //compare character to Enum value, ignoring case
                    System.out.print(word.charAt(i));
                }
            }
        }
    }
}

输入:Hello World 输出:eoo

另一答案

假设你想要一个区分大小写的搜索,那么如何使用正则表达式为你做下面的工作:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

class Main {
    public static void main(String[] args) {
        Scanner inp = new Scanner(System.in);
        System.out.print("In:");
        String word = inp.nextLine();
        //write your code below
        String vowelRegex = "[aeiouAEIOU]";
        Pattern pattern = Pattern.compile(vowelRegex);
        Matcher matcher = pattern.matcher(word);
        while (matcher.find()){
            System.out.println(matcher.group());
        }
    }
}

如果它不区分大小写,你可以转换单词toLowerCase并使用正则表达式[aeiou]。如果你只想要辅音,只需用[^aeiouAEIOU\s](区分大小写)或[^aeiou\s](不区分大小写)替换正则表达式

另一答案

我更喜欢使用Hashmap,因为查找是O(1)

    public class PrintVowelsInWord {

    public static Map<Character, Character> vowels;

    public static void main(String[] args) {
        loadMap();
        // for simplicity sake I am not using Scanner code here
        getVowels("wewillrockyou");
    }

    public static void loadMap() {
        if (vowels == null) {
            vowels = new HashMap<>();
            vowels.put('a', 'a');
            vowels.put('e', 'e');
            vowels.put('i', 'i');
            vowels.put('o', 'o');
            vowels.put('u', 'u');
        }
    }

    public static void getVowels(String input) {
        for (Character letter : input.toCharArray()) {
            if (vowels.containsKey(letter)) {
                System.out.print(letter);
            }
        }
    }
}

以上是关于用Java中的单词打印元音的主要内容,如果未能解决你的问题,请参考以下文章

以元音、辅音开头的单词的读数

编写一个程序, 将 a.txt 文件中的单词与 b.txt 文件中的 单词交替合并到 c.txt 文件中, a.txt 文件中的单词用回车符 分隔, b.txt 文件中用回车或空格进行分隔。(代码片段

Codeforces Round #566 (Div. 2)

辅音和元音斯威夫特

含有元音字母的单词?

Lucene 为带有元音变音的单词创建索引