Как проверить, является ли символ гласной?
этот код 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;
}
}