【问题标题】:How do I check if a char is a vowel?如何检查字符是否为元音?
【发布时间】:2013-10-10 06:05:05
【问题描述】:

这段 Java 代码给我带来了麻烦:

    String word = <Uses an input>
    int y = 3;
    char z;
    do {
        z = word.charAt(y);
         if (z!='a' || z!='e' || z!='i' || z!='o' || z!='u')) {
            for (int i = 0; i==y; i++) {
                wordT  = wordT + word.charAt(i);
                } break;
         }
    } while(true);

我想检查单词的第三个字母是否是非元音,如果是,我希望它返回非元音及其前面的任何字符。如果是元音,则检查字符串中的下一个字母,如果也是元音,则检查下一个字母,直到找到非元音为止。

例子:

word = Jaemeas 然后 wordT 必须 = Jaem

示例 2:

word=Jaeoimus 然后 wordT 必须 =Jaeoim

问题在于我的if 语句,我不知道如何让它检查这一行中的所有元音。

【问题讨论】:

  • z!='a'||z!='e'... 总是会失败。 z 不能同时等于 ae(等等)。请改用&amp;&amp;
  • 我想让 if 检查它不是 'a' 'e' 'i' 'o' 'u',我该如何构造那个 if 语句?
  • 就是这个。但是你看到了 AND。
  • 别忘了yvowel!而且我对您的if 条件有点困惑:每个字母都与ae 等不同...改用AND 运算符
  • @KyleMHB 请不要通过编辑来回答您的问题。如果您找到了解决方案,请将其发布为您自己问题的答案。

标签: java string char indexof truncation


【解决方案1】:

检查元音的简洁方法:

public static boolean isVowel(char c) {
  return "AEIOUaeiou".indexOf(c) != -1;
}

【讨论】:

    【解决方案2】:

    你的情况有问题。想想更简单的版本

    z != 'a' || z != 'e'
    

    如果z'a',那么后半部分为真,因为z 不是'e'(即整个条件为真),如果z'e',那么前半部分将为为真,因为z 不是'a'(同样,整个条件为真)。当然,如果z 既不是'a' 也不是'e',那么这两个部分都是正确的。也就是说,你的条件永远不会是假的!

    你可能想要&amp;&amp;s 代替:

    z != 'a' && z != 'e' && ...
    

    或许:

    "aeiou".indexOf(z) < 0
    

    【讨论】:

    • 啊,是的!太感谢了。不敢相信我无法弄清楚!
    • @KyleMHB 没问题,别忘了accept an answer
    • 完成!使用了 indexOf() 函数,它更简洁。
    • 赞成使用indexOf(),这对于其他用途更加灵活。
    【解决方案3】:

    使用正则表达式的方法怎么样?如果您使用正确的模式,您可以使用组从 Matcher 对象中获取结果。在下面的代码示例中,只要存在模式匹配,对 m.group(1) 的调用就会返回您正在查找的字符串。

    String wordT = null;
    Pattern patternOne = Pattern.compile("^([\\w]{2}[AEIOUaeiou]*[^AEIOUaeiou]{1}).*");
    Matcher m = patternOne.matcher("Jaemeas");
    if (m.matches()) {
        wordT = m.group(1);
    }
    

    实现相同目标的方法略有不同。

    【讨论】:

      【解决方案4】:

      实际上有更有效的方法来检查它,但既然你问过你的问题是什么,我可以说问题是你必须用 AND 运算符更改那些 OR 运算符。使用你的 if 语句,它永远是正确的。

      【讨论】:

        【解决方案5】:

        因此,万一有人遇到这种情况并想要一种可以在许多情况下使用的简单比较方法。

        不管是大写还是小写。 A-Z 和 a-z。

        布尔元音 = ((1

        这是我能想到的最简单的方法。我在 C++ 和 64 位 PC 上对此进行了测试,因此结果可能会有所不同,但基本上“32 位整数”中只有 32 位可用,因为第 64 位和第 32 位被删除,执行时您的值在 1 到 26 之间“

        如果你不明白位是如何工作的,对不起,我不会深入讨论,而是技术

        1

        因此,当我们执行 1

        这种情况适用于您使用位的任何事物,只要值的范围是 0 到 31,即使值大于 32 的索引也可以在这种情况下工作。所以就像前面提到的字母可能是 65- 90 或 97-122 但因为我们一直删除 32 直到剩下 1-26 的余数。其余的不是它实际工作的方式,但它让您了解该过程。

        如果您不能保证收到的信件,请记住一些事情,请检查信件是低于“A”还是高于“u”。因为无论如何结果总是错误的。

        例如,跟随将返回一个假元音肯定。 “!”感叹号是值 33,它将提供与“A”或“a”相同的位值。

        【讨论】:

        • 我确实了解位的工作原理,但我不知道您是如何得到 2130466 掩码的。元音按位有什么特别的吗?
        【解决方案6】:

        首先,您正在检查字母是“not a”或“not e”还是“not i”等。

        假设字母是 i。那么字母不是a,所以返回“True”。那么整个陈述为真,因为 i != a。我认为您正在寻找的是将这些语句组合在一起,而不是它们。

        完成此操作后,您需要查看如何增加 y 并再次检查。如果你第一次得到元音,你想看看下一个字符是否也是元音。这只会检查位置 y=3 处的字符。

        【讨论】:

          【解决方案7】:
           String word="Jaemeas";
           String wordT="";
                  int y=3;
                  char z;
                  do{
                      z=word.charAt(y);
                       if(z!='a'&&z!='e'&&z!='i'&&z!='o'&&z!='u'&&y<word.length()){
                          for(int i = 0; i<=y;i++){
                              wordT=wordT+word.charAt(i);
                              }
                      break;
                      }
                     else{
                           y++;
                       }
          
                  }while(true);
          

          这是我的答案。

          【讨论】:

          • 请解释你的答案,不要只提供一段代码(你改变了什么,为什么,它是如何工作的)。
          【解决方案8】:

          我已经为 VOWELS 声明了一个 char[] 常量,然后实现了一个检查 char 是否为元音的方法(返回一个布尔值)。在我的 main 方法中,我声明了一个字符串并将其转换为一个字符数组,这样我就可以将字符数组的索引作为我的 isVowel 方法的参数传递:

          public class FindVowelsInString {
          
                  static final char[] VOWELS = {'a', 'e', 'i', 'o', 'u'};
          
                  public static void main(String[] args) {
          
                      String str = "hello";
                      char[] array = str.toCharArray();
          
                      //Check with a consonant
                      boolean vowelChecker = FindVowelsInString.isVowel(array[0]);
                      System.out.println("Is this a character a vowel?" + vowelChecker);
          
                      //Check with a vowel
                      boolean vowelChecker2 = FindVowelsInString.isVowel(array[1]);
                      System.out.println("Is this a character a vowel?" + vowelChecker2);
          
                  }
          
                  private static boolean isVowel(char vowel) {
                      boolean isVowel = false;
                      for (int i = 0; i < FindVowelsInString.getVowel().length; i++) {
                          if (FindVowelsInString.getVowel()[i] == vowel) {
                              isVowel = true;
                          }
                      }
                      return isVowel;
                  }
          
                  public static char[] getVowel() {
                      return FindVowelsInString.VOWELS;
                  }
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-06-20
            • 2012-08-23
            • 1970-01-01
            • 2022-06-29
            • 1970-01-01
            • 1970-01-01
            • 2021-07-15
            • 1970-01-01
            相关资源
            最近更新 更多