2011-10-15 29 views
0

我想比较字符串到字符串数组和字符串添加到阵列中,如果它已经不是数组中的数组。比较字符串为字符串的Java

我试图

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

这似乎并没有工作。 所以basicaly如果array = (mike, john, tom, bob); 和新的字符串是tony,它应该比较tony到阵列,并将其添加到阵列中。但是,如果下一个字符串mike,没有它,因为它是已在列表中添加到阵列。

回答

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. 
} 
+0

非常感谢。正是我想要做的。我只是不知道该怎么写。我仍然在学习java,所以我需要做大量的研究。谢谢大家 – blackStar

3

数组的大小不能在Java中被改变。你应该用一个List,或者,如果顺序并不重要,一个Set

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

感谢性反应。这将工作,但我会使用ArrayList。如果我的数组被定义为 – blackStar

+0

@Michael对不起,我不关注。 'ArrayList'是高度优化的,并且是这项工作的正确工具。我很抱歉,我不明白你的意思是“如果我的数组已被定义”。 – phihag

+0

@phihag:如果目标是禁止重复,为什么要使用List?改用Set。 –

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 
0

您应该使用Set来解决此问题。 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] 
0

使用Set

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

您don'n需要,如果它已经存在控制。