说我有很多单词,例如:(水,面粉,鸡蛋)和(豆类,水,牛奶)
如果用户输入的字符串包含任何顺序的所有单词,则会显示一条消息。比如,我有鸡蛋水和一些面粉" - > "那是一块蛋糕"。
实现此目的的最有效方法是什么,假设用户输入的每个字符串可能需要检查大量的单词集和消息组合。
我最初的想法是使用.contains:
for(each-word-set)
{
i = word-set.length;
for(each-word)
{
if(string.contains(word))
{
j++
}
}
if(i == j)
{
//Yes this string contains all words.
}
}
有比这更好的方法吗?
答案 0 :(得分:2)
我最初的方式: 使用空格作为分隔符。
我们可以做到以下几点。
创建一个列表。如下
1)使用Java分割功能。创建数组。
List<String> list = new ArrayList<String>(Arrays.asList(string.split(" ")))`;
2)创建一个哈希地图。
Map<String, String> hash = new HashMap<String, String>();
for(i = 0 ; i < list.length(); i++)
{
hash.put(list[i], list[i]);
}
list[i]
将成为您的关键。
3)检索比赛。
现在,当用户输入您感兴趣的单词时,您可以使用containsKey
命令。例如
if (hash.containsKey("flour") && hash.containsKey("water") && hash.containsKey("beans");
println("Whatever you want");
需要注意的是,创建HashTable对大数据集非常有用。这是一个link,你应该看到它的好处。从哈希表中检索数据是O(1),因此几乎是瞬时的。
希望这很有帮助。
答案 1 :(得分:0)
扩展我的评论。还有一些错误。到目前为止,我的最终解决方案是:
public class Someclass {
public static void main(String[] args) {
String[] words = { "water", "flour", "eggs", "beans", "water", "milk" };
String[] testStrings = { "water flour eggs beans water milk", "somewhat else",
"wader flour ekks beans water milk" };
for (String string : testStrings) {
boolean found = true;
for (String word : words) {
if (!string.contains(word)) {
found = false;
break;
}
}
if (found) {
System.out.println(string + " - That makes a cake");
} else {
System.out.println(string + " - That makes no cake");
}
}
}
}
答案 2 :(得分:0)
You can first create an array or list of strings splitted by space as:
List<string>userStr= userEntry.split(" ");
Now use extended for loop within another loop as:
for(String s: userStr)
{
for(String d: yourList){
if(s.equals d){
//your code
break;
}
}
}