将一串数字与int进行比较

时间:2017-10-14 03:11:47

标签: java arrays list

我正在拍摄电影发行年的字符串,以及ArrayList部电影(字符串标题,int发行年份,enum类型等...) 。参数String year是搜索的用户输入,将与每部电影进行比较,以找到具有匹配发行年份的电影 匹配项将保存到ArrayList。通过将参数保持为(String year,ArrayList电影),如何比较用户搜索输入的第一个数字以检查它是否为int以继续查找电影匹配,否则返回一个空的ArrayList而不是返回一个空的?

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

3 个答案:

答案 0 :(得分: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 :(得分:1)

您应该首先检查输入字符串是否为数字。如果是,您可以继续进行比较。

您将int==String运算符进行比较时,比较时也会出错,这会将int引用与{{1}进行比较价值。您需要将2 int值与==(作为基元的相等oerator)或Object.equals(..)比较2 String个值。

有很多方法可以检查String是否为数字。 您可以按照以下方式自行实现:

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

或者,如果您可以使用第三方广告罐,则可以使用Apache Commons及其方法StringUtils.isNumeric(CharSequence cs)

最后,您的比较应如下所示:

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

答案 2 :(得分:1)

Year class

不是仅仅使用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杯上的年度成员类型从int更改为Year。通过致电equalsisBeforeisAfter进行比较。

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