如何用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(“”
  • 使用for循环,而不是使用while循环进行迭代
  • 我是这样写的:

    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中的数组是以index
    0
    开头的。不过,我甚至不确定他是否愿意这样做。我认为他只想遍历一个字符串,只输出元音。从对问题的评论来看,“是的,我只想测试数组的第二个值”OK。我的错。我将删除我的错误答案。@eboix:我想我是用
    开始用元音
    误导的。已更改为
    第二个字母是元音
    !实际上这是我的错,在测试了这个(唯一一个按照我的要求工作的)之后,我发现我确实想要第一个索引。对不起,我现在很累,我犯了很多错误,但我想每个人都从某个地方开始。谢谢你的帮助。这不是效率低了很多吗?@Eric如果你每次都创建数组,那就是了。如果你能把它提取成一个常数,它几乎是一样的。但在实践中几乎可以肯定这并不重要。(如果您有许多值要比较,当然应该使用
    集合
    。)