我正在尝试遍历ArrayList并确保ArrayList的每个元素在String数组中依次显示。
到目前为止,这是我的代码:
int x = 0;
int y = 0;
int keywordLocationInPhrase = -1;
int nextKeywordLocationInPhrase = -1;
do {
if (keywords.get(x).equals(phrase[y])) {
keywordLocationInPhrase = y;
} else {
y++;
continue;
}
x++;
} while (keywordLocationInPhrase == -1);
我卡在这里是因为我不知道如何获取nextKeyWordLocationInPhrase的位置。
感谢所有帮助!
编辑:
示例:
如果关键字列表为:
[dog, cat]
要匹配的字符串数组是:
[cat, toy, rat, dog]
这将是不正确的,因为即使关键字位于字符串数组中,它们也不会按顺序显示。
在以下情况下有效:
如果关键字列表为:
[dog, cat]
要匹配的字符串数组是:
[dog, toy, rat, cat]
答案 0 :(得分:0)
您想要做的是遍历所有短语并检查关键字;
int y = 0;
for(int i = 0; i < phrase.lenght; i++){
if((y < keyword.size()) && phrase[i].equals(keyword.get(y)){
y++;
}
}
return y==keyword.size();
在您的有效情况下返回true,在无效情况下返回false。
答案 1 :(得分:0)
以下可能是一个更简单的解决方案:
int keyWordIndex = 0; //moves only when needed
boolean allMatch = true;
for(String word : phrase){
if(keywords.contains(word)){
allMatch &= (word.equals(keyword.get(keyWordIndex++));
}
}
//if allMatch is true at this point the order is respected.
答案 2 :(得分:0)
我试图保留您的编码风格和思维方式,而不是您,然后我重构了您的代码:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args){
int x = 0;
int y = 0;
List<String> keywords = new ArrayList<>();
keywords.add("cat");
keywords.add("dog");
String[] phrase = {"cat", "toy", "rat", "dog"};
do {
if(x == keywords.size()) {
System.out.println("success");
return;
}
if(y == phrase.length - 1 && (x < keywords.size() - 1 || !keywords.get(x).equals(phrase[y]))) {
System.out.println("failed");
return;
}
if (keywords.get(x).equals(phrase[y])) {
x++;
} else {
y++;
}
} while (true);
}
}
答案 3 :(得分:0)
这是我的解决之道。扫描单词数组时,我使用地图以获得更好的性能。如果您有任何疑问,请告诉我。
=IIF(Parameters!PageBreak.Value="True",false,true)