这个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
声明,我无法弄清楚如何检查该行中的所有元音。
答案 0 :(得分:48)
检查元音的清洁方法:
public static boolean isVowel(char c) {
return "AEIOUaeiou".indexOf(c) != -1;
}
答案 1 :(得分:26)
你的病情有缺陷。想想更简单的版本
z != 'a' || z != 'e'
如果z
为'a'
,那么后半部分将为真,因为z
不是'e'
(即整个条件为真),如果{{1} } z
然后前半部分将为真,因为'e'
不是z
(同样,整个条件为真)。当然,如果'a'
既不是z
也不是'a'
,那么这两个部分都将成立。换句话说,你的情况永远不会是假的!
您可能希望'e'
代替:
&&
或者也许:
z != 'a' && z != 'e' && ...
答案 2 :(得分:4)
使用正则表达式的方法怎么样?如果使用正确的模式,则可以使用组从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);
}
只是采用一种不同的方法来实现同一目标。
答案 3 :(得分:1)
对于初学者,你正在检查这封信是“不是”或“不是e”还是“不是我”等。
让我们说这封信是我。然后字母不是a,所以返回“True”。然后整个语句为True,因为我!= a。我认为你要找的是和语句一起,而不是OR。
执行此操作后,您需要查看如何递增y并再次检查。如果你第一次得到一个元音,你想看看下一个字符是否也是一个元音。这只检查位置y = 3的字符。
答案 4 :(得分:1)
实际上有更有效的方法来检查它,但既然你已经问过你的问题是什么,我可以说问题是你必须用AND运算符改变那些OR运算符。使用if语句,它始终是真的。
答案 5 :(得分:0)
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);
这是我的答案。
答案 6 :(得分:0)
我已经为VOWELS声明了一个char []常量,然后实现了一个检查char是否是元音的方法(返回一个布尔值)。在我的main方法中,我声明一个字符串并将其转换为一个字符数组,以便我可以将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;
}
}
答案 7 :(得分:0)
因此,任何人遇到这种情况时,都想要一种可以在许多情况下使用的简单比较方法。
是大写还是小写都没有关系。 A-Z和a-z。
布尔元音=((1 <<字母)&2130466)!= 0;
这是我能想到的最简单的方法。我在C ++和64位PC上对此进行了测试,因此结果可能有所不同,但是基本上“ 32位整数”中只有32位可用,因为删除了64位和32位,执行时,您将得到1到26之间的值“ <<字母”。
如果您不了解位是如何工作的,对不起,我不会深入探讨
1 << N与2 ^ N幂或创建2的幂相同。
因此,当我们执行1 << N&X时,我们检查是否X中包含创建我们的元音的2的幂位于该值2130466。如果结果不等于0,则说明它是成功的元音。
这种情况可以适用于您使用位的任何情况,并且在这种情况下,只要值的范围是0到31,甚至大于32的值都可以使用。因此,就像前面提到的字母可能是65- 90或97-122,但此后我们一直删除32,直到剩下1-26的余数为止。剩下的并不是它实际如何工作,而是让您对过程有所了解。
如果不能保证传入的字母,请记住该字母是否低于'A'或高于'u'。因为无论如何结果总是错误的。
例如,以下将返回错误的元音正数。 “!”感叹号是值33,它将提供与“ A”或“ a”相同的位值。