2017-10-14 218 views
2

我正在接受一個電影發行年份的字符串和一個電影的字符串(字符串標題,int發佈年份,enum流派等等)。參數字符串年份是搜索的用戶輸入,它將與每部電影進行比較以找到具有匹配發行年份的電影。
比賽將被保存到ArrayList。通過將參數保留爲(String年,ArrayList影片),如何比較用戶搜索輸入的第一個數字以檢查它是否爲int以繼續查找電影匹配,否則返回空的ArrayList而不是返回null一?比較一串數字與一個int

public ArrayList<Film> compareYear(String year, ArrayList<Film> films)       
{ 
    for(int i=0;i<10;++i) { 
     if(year.valueOf(year.charAt(0)).equals(i)) //check if it's an int 
     { 
      int releaseYear = Integer.parseInt(year); 
      ArrayList<Film> releaseYearMatches = new ArrayList<Film>(); 
      for(Film f : films)     //search through ArrayList of films 
      { 
       int releaseYears = f.getYear();   //gets the year for each film and compares it to user input search "year" 
       if(releaseYears == releaseYear) { 
        yearMatches.add(f); 
       } 
      } 
      return yearMatches; 
     } 
    } 
    ArrayList<Film> nothing = new ArrayList<Film>();   
    return nothing; 
} 

回答

1

您應該首先檢查數字中的輸入字符串。如果是這樣,您可以繼續進行比較。

您還可以在比較的錯誤,因爲你比較Stringint==運營商將比較String參考int值。您需要將2 int的值與==(其作爲原語的等同操作符)或Object.equals(..)的2 String值進行比較。

有很多方法可以檢查String是否是數字。 可以按如下方式實現它自己:

public static boolean isNumeric(String str) { 
    try { 
    double num = Double.parseDouble(str); 
    } 
    catch(NumberFormatException e) { 
    return false; 
    } 
    return true; 
} 

或者,如果你可以使用第三方jar文件,你可以使用Apache Commons及其方法StringUtils.isNumeric(CharSequence cs)

而在去年,你comparisong應該如下所示:

if(isNumeric(year)) { 
    int numericYear = Integer.parseInt(year); 
    for(Film f : films) { 
     int releaseYear = f.getYear(); 
     if(numericYear == numericYear) { 
      yearMatches.add(f); 
     } 
    } 
} 
2

爲此,您可以使用分析異常來檢測年份字符串是否爲數字。與此類似

public ArrayList<Film> compareYear(String year, ArrayList<Film> films)       
{ 

     try 
     { 
      int releaseYear = Integer.parseInt(year); //if the string is not an integer, then it will automatically jump to the catch block 
      ArrayList<Film> releaseYearMatches = new ArrayList<Film>(); 
      for(Film f : films)     //search through ArrayList of films 
      { 
       int releaseYears = f.getYear();   //gets the year for each film and compares it to user input search "year" 
       if(releaseYears == releaseYear) { 
        yearMatches.add(f); 
       } 
      } 

      return yearMatches; 
     } 

     catch(Exception e) 
     { 
      ArrayList<Film> nothing = new ArrayList<Film>(); 

      return nothing; 
     } 
} 

示例代碼在這裏運行 - http://ide.geeksforgeeks.org/mu2b0X

1

Year

而不是用單純的int來表示一個年份值,用於該目的類的使用對象:Year

要從輸入字符串轉換爲此類對象,請致電Year.parse。如果輸入錯誤,例如包含非數字字符,則會引發異常。陷阱爲DateTimeParseException決定返回空的List

Year y = null ; 
try{ 
    y = Year.parse(input) ; 
} catch (DateTimeParseException e) { 
    List<Film> list = Collections.emptyList() ; // Immutable empty list of type `Film`. 
    return list ; 
} 

更改您的年成員在您Film玻璃從intYear類型。請致電equalsisBeforeisAfter進行比較。

if(y.equals(film.getYear())) { … }