我正在拍摄电影发行年的字符串,以及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;
}
答案 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
。通过致电equals
,isBefore
,isAfter
进行比较。
if( y.equals( film.getYear() ) ) { … }