2017-10-14 76 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())) { … }