比较ArrayList中的两个字符串

时间:2016-09-20 16:39:42

标签: java arraylist

我在循环中比较两个字符串时遇到了问题。

说我想在ArrayList中放两个单词。我决定通过inputDialogeBox写两个单词并将它们放在列表中。如果两个单词相同,则第二个单词将不会添加到列表中。

但是当我比较两个字符串时,程序似乎并不关心它们是否相同而且两者都在列表中结束。

继承我的代码:

package testing;

import javax.swing.*;

public class Testing {

    public static void main(String[] args) {
        Word c = new Word();

        // word 1
        String word;
        word = JOptionPane.showInputDialog("Write a word: ");
        System.out.println("word1 = " + word);
        c.setWord(word);

        // word 2
        word = JOptionPane.showInputDialog("Write a new word: ");
        System.out.println("word2 = " + word);
        c.setWord(word); // sätt kortet≤

        System.out.println("words = " + c.getWord().size() + " " + c.getWord());
    }
}

我的班级:

package testing;

import java.util.ArrayList;

public class Word {

    ArrayList<String> words = new ArrayList<>();

    public void setWord(String word) {
        // set first value in arraylist to start the loop
        if (words.isEmpty()) {
            words.add("default");
        }

        for (int i = 0; i < words.size(); i++) {
            if (!words.get(i).equals(word)) {
                words.add(word);
                System.out.println("words.get(i): " + words.get(i) + "  word: " + word);
                break;
            }
        }
    }

    public ArrayList getWord() {
        return words;
    }
}

我的猜测是问题在于我添加一个默认值,只是为了让一些东西循环。否则,如果ArrayList为空,我无法启动循环。但也许有更好的方法?

由于

2 个答案:

答案 0 :(得分:1)

问题是您没有检查所有值,只是逐个检查。首先,您可以查看&#39;默认&#39;并添加到列表中。对于第二个字,请检查&#39;默认&#39;首先,由于这不相等,你也可以将这个词添加到列表中。

public void setWord(String word) {

    boolean exists = false;
    for (int i = 0; i < words.size(); i++) {
        if (words.get(i).equals(word)) {
           exists = true;
           break;
        }
    }
    if (!exists) {
        words.add(word);
        System.out.println("words.get(i): " + words.get(i) + "  word: " + word);
    }
}

或者你可以使用ArrayList contains:

public void setWord(String word) {

    if(!words.contains(word)) {
        words.add(word);
        System.out.println("words.get(i): " + words.get(i) + "  word: " + word);
    }
}

答案 1 :(得分:1)

在这些类型的情况下,您应该使用Set而不是ArrayList。 仍然低于代码修改应该会帮助你。

public void setWord(String word) {'
        boolean found = false;    
        for (int i = 0; i < words.size(); i++) {
            if (words.get(i).equals(word)) {
                found=true;
                break;
            }
        }
        if(!found){
           words.add(word);
        }
    }