2012-09-01 136 views
-2

我不完全确定如何说出这件事。我想知道如何检查变量中是否存在多个字符串中的一个。 我被告知这将工作,但它不是我所期望的。如何比较if语句中的多个字符串与Java?

 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]); 
      } 
+3

什么是你尝试准确地*做* * –

+1

'lett'的类型是什么?你想做什么? – nhahtdh

+0

请显示'lett'如何设置 – Pao

回答

3

您的代码是以非常迂回的方式编写的。

  1. 没有意义,检查字符串的每个循环中的第二个字母 - 检查这一点,事前,并将结果
  2. 不要使用.split("")时,所有你想要的是一个字符数组
  3. 使用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); 
    } 
    //... 
} 
+0

它不是'lett [0]'吗?只是问,因为Java中的数组以索引'0'开始。不过,我甚至不确定他是否想要这样做。我认为他只是想通过一个字符串,只输出元音。 – eboix

+0

从对这个问题的评论中,“_yeah,我只想测试array_的第二个值” – Eric

+0

OK。我的错。我会删除我的错误答案。 – eboix

1

你应该使用||,不|

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

|是按位或操作,而||是短路逻辑或操作。

+1

你确定它有多大的区别?我不是。 –

+0

@BorisStrandjev:使用'||'效率更高,因为它在达到真实时停止评估。 – Eric

+0

这在大多数情况下都是正确的,因为与'|'比较将会强制所有比较,而在比较结果为'true'后比较'||'将会停止。 – Pao

0

您已使用| (按位OR)而不是|| (逻辑或)

无论何时您想'测试条件1或条件2',都使用'||'。

+1

'|'也是一个逻辑或,但它不会快速失败。 –

+0

在这种情况下,这并不重要,但你是对的,一般来说,你应该使用'||' – biziclop

+2

@HovercraftFullOfEels:老兄,我只是喜欢你投下的赞成率。我认为这是你在不到4分钟内看到的第四个... –

0

如果你有这样的事情:

if(a.equals(b) || a.equals(c) || a.equals(d)) 

你可以把它改写为:

if(Arrays.asList(b,c,d).contains(a)) 

当然如果b,c和d为常数,你可以创建列表作为也是不变的。

+0

这不是那么低效吗? – Eric

+0

@Eric如果您每次都创建数组,它就是。如果你可以把它解压缩成一个常量,它几乎是一样的。但在实践中这几乎肯定不重要。 (如果你有很多值可以比较,你当然应该使用'Set'代替。) – biziclop

0

这里是我的解决方案。使用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. 
    }