【问题标题】: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<String, String>,全名,例如"S4", "Samsung S4"
然后查找速度会快很多。