我有一组关键字,我有一个字符串,其中包含由'/‘分隔的关键字实例。例如:“食品”或“汽车”是关键词,“/食品/燕麦/水果”,“/轮胎/汽车/车轮”是字符串。关键字总数为5500个。我需要标记这个字符串‘合格’,如果它至少有一个5550关键字在它。我可以做的一种方法是在hashSet中加载所有5500个关键字,并将字符串拆分为标记,并检查hashSet是否包含每个标记。如果查找匹配,我将该字符串标记为“合格”。
在性能方面,有没有更好的解决方案?
发布于 2015-04-30 08:28:37
令牌匹配的简化解决方案可以是
public class REPL {
private static final HashSet<String> keyWords = new HashSet<>();
public static void main(String[] args) {
keyWords.add("food");
keyWords.add("car");
String[] strings = {
"/food/oatmeal/fruits",
"/tyre/car/wheel",
"/steel/nuts/bolts",
"/cart/handle/grill"
};
for (String s : strings) {
System.out.printf("string: %-20s ", s);
if (isEligible(s)) {
System.out.println("eligible: true");
} else {
System.out.println("eligible: false");
}
}
}
private static boolean isEligible(String s) {
StringTokenizer st = new StringTokenizer(s, "/");
while (st.hasMoreTokens()) {
if (keyWords.contains(st.nextToken())) {
return true;
}
}
return false;
}
}https://stackoverflow.com/questions/29954580
复制相似问题