【问题标题】:Comparing a string of numbers with an int将一串数字与 int 进行比较
【发布时间】:2017-10-14 03:11:47
【问题描述】:

我正在接受电影发行年份的字符串,以及电影的ArrayList(字符串标题、int 发行年份、enum 流派等)。参数 String year 是用户输入的搜索,将与每部电影进行比较以找到具有匹配发行年份的电影。
比赛将被保存到ArrayList。通过将参数保持为(字符串年份,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;
}

【问题讨论】:

    标签: java arrays list


    【解决方案1】:

    为此,您可以只使用解析异常来检测年份字符串是否为数字。

    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

    【讨论】:

      【解决方案2】:

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

      当您将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;  
      }
      

      或者,如果您可以使用 3rd 方 jar,您可以使用 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);
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        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 玻璃上的年份成员类型从int 更改为Year。通过调用equalsisBeforeisAfter进行比较。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-27
          • 1970-01-01
          • 2022-08-14
          • 2017-09-10
          • 2015-01-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多