如何用Java比较if语句中的多个字符串?
我不完全确定这个词怎么说。我想知道如何检查变量中是否存在几个字符串中的一个。 我被告知这会奏效,但它并没有达到我的预期如何用Java比较if语句中的多个字符串?,java,string,if-statement,Java,String,If Statement,我不完全确定这个词怎么说。我想知道如何检查变量中是否存在几个字符串中的一个。 我被告知这会奏效,但它并没有达到我的预期 String lett2array=arr[i]; String[] lett=lett2array.split(""); int y = 0; while(y != lett.length){ if(lett[1].equals("a")||lett[1].equals("e")||lett[1].
String lett2array=arr[i];
String[] lett=lett2array.split("");
int y = 0;
while(y != lett.length){
if(lett[1].equals("a")||lett[1].equals("e")||lett[1].equals("i")||lett[1].equals("o")||lett[1].equals("u")){
inputField.append(" \n"+lett[y]);
}
您应该使用
|
,而不是|
if(lett[1].equals("a") || lett[1].equals("e") || lett[1].equals("i") || lett[1].equals("o") || lett[1].equals("u")) {
inputField.append(" \n"+lett[y]);
}
|
是按位or运算符,而|
是短路逻辑or运算符。您使用了|(按位or)而不是|(逻辑or)
当您想要“测试条件1或条件2”时,请使用“| |”。如果您有以下内容:
if( a.equals( b ) || a.equals( c ) || a.equals( d ) )
您可以将其改写为:
if( Arrays.asList( b,c,d).contains( a ) )
当然,如果b、c和d是常量,您也可以将列表创建为常量。使用Apache Commons:
StringUtils.startsWithAny(String string, String [] searchStrings)
更多信息:
这是我的解决方案。使用
charAt(int index)
而不是split
,这是O(n)时间复杂度,比较chars
,而不是String
s,速度更快
String currString = arr[i]; // Get the current string
char secondLet = currString.charAt(1); // Get the second letter
// chars are primitive, so == will suffice
if(secondLet == 'a' || secondLet == 'e'
|| secondLet == 'i' || secondLet == 'o' || secondLet == 'u') {
// The second letter is a vowel!
// Do whatever you want to do.......
// I didn't understand if you wanted to output the whole String,
// Or just the vowels. Whatever. Just do what you want.
}
您的代码是以非常迂回的方式编写的
.split(“”
)String str = arr[i];
char[] letters = str.toCharArray();
boolean secondLetterIsVowel = letters[1] == 'a'
|| letters[1] == 'e'
|| letters[1] == 'i'
|| letters[1] == 'o'
|| letters[1] == 'u';
for(char letter : letters) {
if(secondLetterIsVowel) {
inputField.append(" \n" + letter);
}
//...
}
你到底想做什么?什么类型的
lett
?你想做什么?你确定你想lett[1]
而不是lett[y]
?你的while(y!=lett.length)
循环将永远不会终止,因为lett.length
和y
都不会改变。@user1640491:为什么不使用for循环?你确定它会有这么大的不同吗?我不是。@BorisStrandjev:使用|
更有效,因为它在遇到true时停止求值。在大多数情况下,这是正确的,因为与|
比较将强制进行所有比较,而与|
比较将在其中一个比较求值为true
后停止,感谢您的详细说明,但这次我只想指出,这不会解决OPs问题(无论是什么),在这种情况下(特别是),它们之间没有逻辑上的区别。
也是一个逻辑or,但它不会很快失效。在这种情况下,这没关系,但您是对的,一般来说,你应该使用|
@HovercraftFullOfEels:dode,我只是喜欢你投否决票的速度。我想这是我在不到4分钟内看到的第四次…@HovercraftFullOfEels:不确定您使用的术语,但它通常被称为短路评估。@HovercraftFullOfEels:这不是lett[0]
?只是问一下,因为Java中的数组是以index0
开头的。不过,我甚至不确定他是否愿意这样做。我认为他只想遍历一个字符串,只输出元音。从对问题的评论来看,“是的,我只想测试数组的第二个值”OK。我的错。我将删除我的错误答案。@eboix:我想我是用开始用元音误导的。已更改为第二个字母是元音
!实际上这是我的错,在测试了这个(唯一一个按照我的要求工作的)之后,我发现我确实想要第一个索引。对不起,我现在很累,我犯了很多错误,但我想每个人都从某个地方开始。谢谢你的帮助。这不是效率低了很多吗?@Eric如果你每次都创建数组,那就是了。如果你能把它提取成一个常数,它几乎是一样的。但在实践中几乎可以肯定这并不重要。(如果您有许多值要比较,当然应该使用集合
。)