多个字符串和条件匹配?

时间:2010-10-25 21:20:09

标签: java string substring

我有一个程序需要能够搜索'book'对象的ArrayList,并确定哪些符合给定的标准。

您可以按名称,身份证号码或已发布的年份进行搜索。 或者仅仅是上述任何一种。

目前我使用嵌套的if语句,其中空值表示未指定字段并显示全部。

for(int x = 0; x<bookList.size(); x++)
{
    if(bookList.get(x).callNum.equals(callNum) || callNum == null)
    {
         if(bookList.get(x).title.equals(title) || title == null)
         {
             if((bookList.get(x).year>= startDate 
                 && bookList.get(x).year <= endDate) || timeFrame == null)
             {
                 bookList.get(x).ToString();
             }
         }
     }
 }

我遇到问题的唯一地方是标题变量。我需要它来进行单词级匹配。因此,如果一本书被称为“Java编程”而另一本书被称为“面向对象的Java编程”,那么当搜索寻找“Java”时,两者都应该返回。我怎么能做到这一点?

感谢您的帮助,谢谢您的时间!

5 个答案:

答案 0 :(得分:2)

怎么样:

if (title == null || bookList.get(x).title.contains(title))

假设bookList.get(x).title是一个字符串。

答案 1 :(得分:0)

String.indexOf()是一种简单的方法。

String s1 = "a b c";
s1.indexOf("b")

将返回2(我认为)。如果您尝试使用“x”,它将返回-1,因为找不到它。检查http://download.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf(java.lang.String

上的API

正则表达式可能是更好的方法。

作为一个注释,4个嵌套级别令人困惑,如果可能应该避免。

答案 2 :(得分:0)

首先,将bookList.get(x)表达式提取到局部变量中,这样就不必在条件中多次重复它。

您可以使用name.indexOf(“Java”)&gt; -1或name.contains(“Java”)来匹配子字符串

答案 3 :(得分:0)

在您的条件中使用String.contains(pattern)方法: 例如。 booktitle.contains( “Java” 的);

答案 4 :(得分:0)

String.indexOf(..)将起作用。我想你可能也想要toLowerCase()书名和标准。另外你关心订单吗?我的意思是,搜索“Java编程”应该匹配上面的两个标题,即使在第二个单词是在另一个顺序中,“in”在它们之间?如果是这样,您将要分割(“\ s +”)并单独查找每个单词。