-2

考虑我有一个 Arraylist,其中包含产品名称,例如

Dell Inspiron Laptop
Apple iPad
Samsung S4

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

4

5 回答 5

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;
}

}
于 2013-11-13T02:48:12.230 回答
0

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

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);
        }
    }
于 2013-11-13T02:39:06.690 回答
0

您可以执行以下操作:

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;
}
于 2013-11-13T02:50:44.290 回答
0

首先清理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;
    }
}
于 2013-11-13T02:55:10.663 回答
0

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

也许你应该使用一个Map<String, String>产品,全名例如"S4", "Samsung S4" 然后查找会快得多。

于 2013-11-13T02:57:27.207 回答