【问题标题】:Searching through Arraylist In Java for particular pattern在 Java 中通过 Arraylist 搜索特定模式
【发布时间】:2013-11-13 02:33:55
【问题描述】:

假设我有一个 Arraylist,其中包含像

这样的产品名称
Dell Inspiron Laptop
Apple iPad
Samsung S4

我想进行搜索,例如如果搜索S4,它会返回Samsung S4。我试图在许多网站上找到答案,但没有得到答案。我使用了 .matches 和 .contains 但没用。

【问题讨论】:

  • 贴出你试过的代码。

标签: java search arraylist find pattern-matching


【解决方案1】:

迭代产品名称列表,假设产品名称变量为name,为String类型。

您可以使用if (name.contains(value)) {if(name.indexOf(value)!=-1){来检查名称中是否包含要搜索的值。

试试下面的代码:

import java.util.ArrayList;
import java.util.List;

public class Test {

public static void main(String[] args) {

    List<String> prodNames = new ArrayList<String>();
    prodNames.add("Dell Inspiron Laptop");
    prodNames.add("Apple iPad");
    prodNames.add("Samsung S4");

    // Search S4 and it will print Samsung S4 in Console
    System.out.println(search("S4", prodNames));
}

public static String search(String value, List<String> prodNames) {
    for (String name : prodNames) {
        if (name.contains(value)) {
            return name;
        }
    }

    return null;
}

}

【讨论】:

    【解决方案2】:

    您可以编写如下所示的实用程序函数,用于扫描列表内容以查找特定模式。希望这对你有用。

    public static void findMatch(List<String> listNames, String searchTerm){
    
            for(String inName:listNames){
                if(inName!=null)
                    if(inName.contains(searchTerm))
                        System.out.println(" Match Found for "+inName);
            }
        }
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      public List<String> matches (List<String> dataList, String matchStr){
        List<String> result = new ArrayList<String>();
        if (matchStr != null) {
          matchStr = matchStr.toLowerCase();
          for(String d : dataList){
            if (d.toLowerCase().contains(matchStr)) {
              result.add(d);
            }
          }
        }
        return result;
      }
      

      【讨论】:

        【解决方案4】:

        首先清理Array的定义。我猜它实际上看起来像这样:

        { "Dell Inspiron", "Apple iPad", "Samsung S4" }
        

        然后在你的 IDE 中运行它:

        import java.util.ArrayList;
        import java.util.List;
        
        class TestSearching {
            public static void main(String args[]) {
                List<String> products = new ArrayList<String>();
                products.add("Dell Inspiron");
                products.add("Apple iPad");
                products.add("Samsung S4");
        
                System.out.println("Matches to S4 : " + findMatches(products,"S4"));
            }
        
            public static List<String> findMatches(List<String> products, String searchTerm) {
                List<String> result = new ArrayList<String>();
                for (String product : products) {
                    if ( product.contains(searchTerm) ) result.add(product);
                }
                return result;
            }
        }
        

        【讨论】:

          【解决方案5】:

          如果您总是想在第一个空格之后查找字符串,那么您可能不想使用 ArrayList

          也许您应该使用产品的Map&lt;String, String&gt;,全名,例如"S4", "Samsung S4" 然后查找速度会快很多。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-23
            • 2020-07-24
            • 2010-11-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多