2012-09-01 138 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. 
    }