检查ArrayList中的所有单词是否都按顺序排列在字符串数组中?

时间:2018-12-05 21:40:06

标签: java arrays arraylist

我正在尝试遍历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]

4 个答案:

答案 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)