【问题标题】:Multiple string and condition matching?多个字符串和条件匹配?
【发布时间】:2010-10-25 21:20:09
【问题描述】:

我有一个程序需要能够搜索“书”对象的 ArrayList,并确定哪些符合给定条件。

您可以按姓名、身份证号或出版年份进行搜索。 或者只是通过上述的任何分类。

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

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”时两者都应返回。我怎样才能做到这一点?

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

【问题讨论】:

  • 你不需要在你的问题标题中包含[tag],我们有标签=)
  • 另外,你应该考虑交换condition || foo = null子句的顺序,如果foo实际上是null,短路逻辑会减少检查次数
  • 您不需要嵌套的if 语句。您可以使用&amp;&amp; 加入所有条件(确保将所有内容括起来,因为&amp;&amp; 的优先级高于||)。
  • 吸气剂也不错。而不是bookList.get(x).title,你应该有bookList.get(x).getTitle()

标签: java string substring


【解决方案1】:

怎么样:

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

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

【讨论】:

    【解决方案2】:

    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 级嵌套令人困惑,应尽可能避免。

    【讨论】:

      【解决方案3】:

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

      您可以使用 name.indexOf("Java")>-1 或 name.contains("Java") 来匹配子字符串

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2017-11-03
            • 2020-02-28
            • 2014-09-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-14
            相关资源
            最近更新 更多