Как проверить, является ли символ гласной?

этот код 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 оператор, я не могу понять, как заставить его проверить все гласные в этой строке.

7 ответов


ваше состояние испорчено. Подумайте о более простой версии

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

если z is 'a' тогда вторая половина будет истинной, так как z - это не 'e' (т. е. условие истинно), и если z is 'e' тогда первая половина будет правдой, так как z - это не 'a' (опять же, все условие true). Конечно, если z - это не 'a', ни 'e' тогда обе части будут истинными. Другими словами, ваше состояние никогда не будет ложь!

вы, вероятно, хотите &&s вместо этого:

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

или, возможно:

"aeiou".indexOf(z) < 0

чистый метод для проверки гласных:

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

Как насчет подхода с использованием регулярных выражений? Если вы используете правильный шаблон, вы можете получить результаты от объекта Matcher с помощью групп. В примере кода ниже вызов m.группа (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);
}

просто немного другой подход, который выполняет ту же цель.


для начала вы проверяете, является ли буква " не a "или" не e "или" не i " и т. д.

допустим, что буква i. Тогда буква не является, так что возвращает "True". Тогда все утверждение истинно, потому что я != a. Я думаю, что то, что вы ищете, - это to и заявления вместе, а не Или они.

Как только вы это сделаете, вам нужно посмотреть, как увеличить y и проверить это снова. Если в первый раз вы получаете гласную, вы хотите увидеть, является ли следующий символ гласная тоже или нет. Это проверяет только символ в местоположении y=3.


на самом деле есть гораздо более эффективные способы проверить это, но поскольку вы спросили, в чем проблема с вашим, я могу сказать, что проблема в том, что вам нужно изменить те или операторы с операторами AND. С вашим утверждением if оно всегда будет истинным.


 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);

вот мой ответ.


Я объявил константу char[] для гласных, а затем реализовал метод, который проверяет, является ли char гласной или нет (возвращая логическое значение). В моем основном методе я объявляю строку и преобразую ее в массив символов, чтобы я мог передать индекс массива символов в качестве параметра моего метода 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;
        }
    }