2017-06-28 467 views
0

我只需要找到一種方法來驗證輸入,以便如果第一個數組輸入(hometeam)丟失,它會顯示消息「無主隊進入」。Java ArrayList - 檢查元素是否爲空

樣品輸入= 「埃弗頓:利物浦:1:1」 失蹤hometeam例如 「:利物浦:1:1」

正如你所看到的,我的嘗試是下面,我想不出如何工作這一點:

if (stats.get(i)[0] == null){ 
System.out.println("no home team name entered"); 
       } 

這裏是我的全碼:

public static void main(String args[]) { 

     Scanner sc = new Scanner(System.in); 
      ArrayList<String[]> stats = new ArrayList<>(); //initialize a container to hold all the stats 
      System.out.println("please enter match results:"); 
      while(sc.hasNextLine()) 
      { 
       String input = sc.nextLine(); 
       String[] results = input.split(" : "); 
       if(results.length == 4) 
       { 
        stats.add(results); 
       } 
       else if(input.equals("stop")) 
        break; 
       else 
        System.out.println("Error reading input"); 
      }//end of while 

      for(int i = 0; i < stats.size(); i++) 
      { 
       if (stats.get(i)[0] == null){ 
        System.out.println("no home team name entered"); 
       } 
       try{ 
        System.out.println(stats.get(i)[0] + " " + Integer.valueOf(stats.get(i)[2]) + " : " + 
          Integer.valueOf(stats.get(i)[3]) + " " + stats.get(i)[1]); 
       }catch (Exception e) { 
        //do nothing with any invalid input 
       } 
      } 

}

+0

所以。你的嘗試做了什麼,它不應該做什麼?它不應該做什麼? –

+0

它應該告訴用戶他們沒有在[0]中輸入一個值,但它只是沒有說什麼,它跳過if語句 – JHurst

+2

'if(stats.get(i)[0] == null || stats.get(i)[0] .trim()。isEmpty()){'? - 或者添加一個'System.out'語句來測試這個值,或者用一個調試器進行簡單的運行可能會有所幫助 – MadProgrammer

回答

1

拆分數組將第一個元素創建爲空字符串 - 不是空字符串。

所以,你需要改變stats.get(i)[0] == nullstats.get(i)[0].isEmpty()

你也在一個trim()所以任何多餘的空格首先刪除添加或更改拆分正則表達式來\\s+:\\s+,這則在1個或多個出現匹配空間兩側的空間。

如果要考慮當輸入數據可能不能有空格,那麼你可以改變你的正則表達式分割字符串的情況下是\\s*:\\s*,這然後0以上出現的空間結腸的兩側相匹配。

+0

這確實幫了很多!儘管如果你在第一個元素(「:Arsenal:2:1」)中放置一個空格,那麼它只會給出「無主隊進入」的味精......如果你沒有放置空格(「:chelsea:2:1 「)它只是以」vs阿森納:2-1「回來? – JHurst

+0

這是因爲它希望分割中有一個空格,如果沒有空格,那麼分割不會在第一個':'出現,只是刪除空間要求或將你的正則表達式改爲'\\ s *:\\ s *'(0或更多空格) –

+0

感謝您的時間!:) – JHurst

0

我通常使用這個代碼(這是非常糟糕的,有可能是更好的方法,但是我做了這一個由自己,所以請不要吝嗇)

var Empty = [""] 
if(yourinput == Empty[0]) { 
    //Run this code 
} 

,或者你可以這樣做:

if(yourinput.length == 0) { 
    //Run this code 
} 
+0

javascript!= java –

+0

Omg我很愚蠢 –

0

非常簡單。如果沒有輸入,你的for循環將不會被輸入,因此不會進行檢查。

更換您的for循環與閱讀的內容後:

if (stats.isEmpty()){ 
    System.out.println("no home team name entered"); 
} 
else { 
    try{ 
     for(int i = 0; i < stats.size(); i++){ 
      System.out.println(stats.get(i)[0] + " " + Integer.valueOf(stats.get(i)[2]) + " : " + 
         Integer.valueOf(stats.get(i)[3]) + " " + stats.get(i)[1]); 
     } 
    } 
    catch (Exception e) { 
      //do nothing with any invalid input 
    } 
} 

希望有所幫助。

我讀了意見,並理解你的問題:

你不會有包含多於或少於4個元素任何的String []。你通過說result.length == 4來確保這一點,否則沒有東西會被添加到ArrayList。下一步是確保輸入有效的團隊名稱,最後2個元素是Numbers。從 How to check if a String is numeric in Java複製功能,可以是綠色答案或最高點贊同的答案。

0

嘗試使用StringUtils package。您可以使用StringUtils.isBlank(stats.get(i)[0])

StringUtils.isBlank檢查字符串是否爲空或全部爲空白。

此外,您需要檢查,如果統計是空的,以顯示一條消息,整個輸入是空白

這裏是對的isBlank代碼,如果你想知道:

public static boolean isBlank(final CharSequence cs) { 
    int strLen; 
    if (cs == null || (strLen = cs.length()) == 0) { 
     return true; 
    } 
    for (int i = 0; i < strLen; i++) { 
     if (Character.isWhitespace(cs.charAt(i)) == false) { 
      return false; 
     } 
    } 
    return true; 
}