如果字符串数组尚不存在,则将其添加到字符串数组中

时间:2011-10-15 08:32:38

标签: java

我正在尝试将字符串与字符串数组进行比较,并将字符串添加到数组中(如果数组已经不在数组中)。

我试过

String [] array =new String [100];
for (int i=0; i<counter; i++){
    if(!str.equals(arry[i])){
        array[i]=str;
        counter++;
    }
}

它似乎不起作用。 如果array = (mike, john, tom, bob);那么基本 并且新字符串是tony,它应该将tony与数组进行比较并将其添加到数组中。但是如果下一个字符串是mike,则不要将它添加到数组中,因为它已经在列表中。

5 个答案:

答案 0 :(得分:3)

在Java中无法更改数组的大小。您应该使用List,或者如果订单无关紧要,则使用Set

List<String> lst = new ArrayList<String>(Arrays.asList(arry));
if (! lst.contains(str)) lst.add(str);

答案 1 :(得分:3)

数组具有固定大小,因此向数组添加元素并不容易。您想要的行为正是java.util.Set的行为。学习如何使用标准集合:它们比数组更强大。如果要保留元素的顺序,请使用LinkedHashSet。见http://download.oracle.com/javase/tutorial/collections/

现在,为什么你的代码会失败?

您正在遍历数组,一旦找到一个不等于字符串的元素,就用字符串替换它。而且你也可以在不考虑数组长度的情况下进行迭代。这是您可能需要的代码:

boolean found = false;
for (String element : array) {
    if (str.equals(element)) {
        found = true;
        break;
    }
}
if (!found) {
    // add str to array, but where? Use a Set instead.
}

答案 2 :(得分:2)

如果可以的话,避免使用数组,Java的Collections Framework就不那么麻烦了:

将您的所有姓名保留在HashSet<String>(如果订单很重要,请使用LinkedHashSet,如JB Nizet在评论中所述)并add() 每个你遇到的“下一个名字” - 集合语义将保持所有元素的独特性,甚至可以根据需要增长,无需创建新数组并复制自己周围的事物。

Set<String> names = new HashSet<String>();
names.add("mike");
names.add("john");
names.add("tom");
names.add("bob");
assert names.size() == 4;

names.add("bob");
assert names.size() == 4; // still, because "bob" was already in the set

names.add("tony");
assert names.size() == 5; // "tony" is a new unique value, so the set grows

答案 3 :(得分:0)

您应该使用Set来解决此问题。集合是一种数据结构,不能包含重复元素,非常适合您的问题。

 Set<String> names = new LinkedHashSet<String>();
 Collections.addAll(names, "Mike", "John", "Tom", "Bob");
 names.add("Tony");
 System.out.println(names); // Tony gets added to the end of the Set
 names.add("Mike");
 System.out.println(names); // Set already contains Mike, don't add another

输出

[Mike, John, Tom, Bob, Tony]
[Mike, John, Tom, Bob, Tony]

答案 4 :(得分:0)

使用Set

Set<String> first = new HashSet<String>(Arrays.asList(arry));
first.add(str);

你不需要控制它是否已经存在。