我有以下代码,我只想检索那些重复但找不到正确结果的值。我不知道我哪里错了。
public class TestDummy {
public static void main(String args[]){
String arr[] ={"lady", "bird", "is","bird","lady","cook"};
int len = arr.length;
System.out.println("Size "+len);
for(int i=0 ; i<=len;i++){
for(int j=1 ; j< len-1;j++){
if(arr[i]==arr[j]){
System.out.println("Duplicate "+arr[i]);
}
}
}
}
}
答案 0 :(得分:3)
String arr[] ={"lady", "bird", "is","bird","lady","cook"};
Map<String, Integer> map = new HashMap<>();
for(String str: arr) {
if(map.containsKey(str)) {
map.put(str, map.get(str)+1);
} else{
map.put(str, 1);
}
}
for(String str: map.keySet()) {
if(map.get(str) > 1) {
System.out.println("Duplicate: "+ str+" count:"+map.get(str));
}
}
输出:
Duplicate: bird count:2
Duplicate: lady count:2
答案 1 :(得分:1)
您必须将代码更改为:
public static void main(String args[]) {
String arr[] = { "lady", "bird", "is", "bird", "lady", "cook" };
int len = arr.length;
System.out.println("Size " + len);
for (int i = 0; i < len; i++) { // not <= but only <
for (int j = i + 1; j < len; j++) { // start from i+1 and go upto last element
if (arr[i].equals(arr[j])) { // use equals()
System.out.println("Duplicate " + arr[i]);
}
}
}
}
O / P:
Size 6
Duplicate lady
Duplicate bird
答案 2 :(得分:0)
Firsty Strings将与.equals()
而非==
if(arr[i].equals(arr[j]))
{
System.out.println("Duplicate "+arr[i]);
}
我建议您使用sets
,因为他们不允许在其中输入重复值,或者列表并使用.contains()方法检查它是否已存在。
List<String> list = new ArrayList();
for(int i = 0; i < arr.length; i++)
if(list.contains(arr[i])
System.out.println("Duplicate" + arr[i]);
else
list.add(arr[i]);
答案 3 :(得分:0)
您可以使用更简单的方法,如下所示
Set<String> strings=new Hashset<String>();
for(int i=0;i<len;i++){
if(strings.add(arr[i])==false){
System.out.println(arr[i]+" is a duplicate");
}
}
并在现有代码中执行arr[i].equals(arr[j])
,以查看值是否相等(如果它们相等则重复)
==
检查引用等价,而equals()
方法检查值等价,所以当你需要检查两个对象的等价时你应该使用equals方法
答案 4 :(得分:0)
有一些问题。
for(int i=0 ; i<len;i++){
for(int j=i +1 ; j< len;j++){
if(arr[i].equals(arr[j])){
System.out.println("Duplicate "+arr[i]);
}
}
}
请注意:我已将j=1
更改为j=i
,将==
更改为.equals
,将<=
更改为<
和len -1
到len
答案 5 :(得分:0)
这会为您提供一份包含重复项及其计数的列表:
var duplicates =
from word in arr
group word by word into g
where g.Count() > 1
select new { g.Key, Count = g.Count() };
答案 6 :(得分:0)
创建单词和出现的地图。
import java.util.*;
public class TestDummy {
public static void main(String args[]) {
String arr[] = {
"lady", "bird", "is", "bird", "lady", "cook"
};
Map<String, Integer> dictionary = new TreeMap<>();
int len = arr.length;
System.out.println("Size " + len);
for (int i = 0; i < len; i++) {
if (dictionary.containsKey(arr[i])) {
dictionary.put(arr[i], dictionary.get(arr[i]) + 1);
System.out.format("Duplicate %s%n", arr[i]);
} else {
dictionary.put(arr[i], 1);
}
}
}
}
**Output**
Size 6
Duplicate bird
Duplicate lady
答案 7 :(得分:0)
public static String[] removeDuplicates(String[] array){
return new HashSet<String>(Arrays.asList(array)).toArray(new String[0]);
}
答案 8 :(得分:0)
以上解决方案确实有效 但只是为了使代码清洁,您可以使用Linq.js