Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在数组中查找重复项-Java_Java - Fatal编程技术网

如何在数组中查找重复项-Java

如何在数组中查找重复项-Java,java,Java,我目前有这段代码,它完全可以在Java中运行。它获取一个字符串,将其转换为一个数组,并删除所有重复项。我决定用“一个水手到海里去看他能看到的东西,但他能看到的只有深蓝色的海底”这根绳子。我使用这个,因为它有大量的副本 要添加到代码中,我希望能够获得数组中所有元素的位置,我相信正确的方法是通过嵌套循环,但我不确定如何实现这一点。如果有人有一些指导,甚至是一般性的想法,我会非常满意 以下是当前代码: static ArrayList<String> removeDuplicates(St

我目前有这段代码,它完全可以在Java中运行。它获取一个字符串,将其转换为一个数组,并删除所有重复项。我决定用“一个水手到海里去看他能看到的东西,但他能看到的只有深蓝色的海底”这根绳子。我使用这个,因为它有大量的副本

要添加到代码中,我希望能够获得数组中所有元素的位置,我相信正确的方法是通过嵌套循环,但我不确定如何实现这一点。如果有人有一些指导,甚至是一般性的想法,我会非常满意

以下是当前代码:

static ArrayList<String> removeDuplicates(String[] list) {
// Store unique items in result.
ArrayList<String> result = new ArrayList<>();
// Record encountered Strings in HashSet.
HashSet<String> set = new HashSet<>();
// Loop over argument list.
for (String item : list) {
    // If String is not in set, add it to the list and the set.
    if (!set.contains(item)) {
    result.add(item);
    set.add(item);
    }
}
return result;
}
public static void main(String[] args) {
    String sea1 = "A sailor went to sea sea sea, to see what he could see see see, but all that he could see see see, was the bottom of the deep blue sea sea sea";
    String sea2 = sea1.toLowerCase(); 
    String sea3 = sea2.replaceAll("[\.:;,\"!\?]", " "); //remove punctuation + sets to lower case
    String sea4 = sea3.replaceAll("  ", " ");
    String sea5 = sea4.replaceAll(" ", ",");
    String sea6 = sea5.replaceAll("'", " ");
    String sea7 = sea6.replaceAll(" ", "");
    System.out.println("Here is the string: " + sea7);

String[] sealist = sea7.split(",");
    System.out.println("Here is the string 'end' with duplicates removed: ");

// Remove duplicates from ArrayList of Strings.
ArrayList<String> unique = removeDuplicates(sealist);
for (String element : unique) {

    System.out.println("- " + element);
}
}
static ArrayList removeDuplicates(字符串[]列表){
//在结果中存储唯一项。
ArrayList结果=新建ArrayList();
//在哈希集中记录遇到的字符串。
HashSet=newhashset();
//循环参数列表。
用于(字符串项:列表){
//如果字符串不在集合中,请将其添加到列表和集合中。
如果(!set.contains(项目)){
结果.添加(项目);
设置。添加(项目);
}
}
返回结果;
}
公共静态void main(字符串[]args){
String sea1=“一个水手去海边,想看看他能看到什么,但他能看到的只是深蓝色的海底”;
字符串sea2=sea1.toLowerCase();
字符串sea3=sea2.replaceAll(“[\。:;,\”!\?],“”);//删除标点符号+设置为小写
字符串sea4=sea3.replaceAll(“,”);
字符串sea5=sea4.replaceAll(“,”,”);
字符串sea6=sea5.replaceAll(“,”);
字符串sea7=sea6.replaceAll(“,”);
System.out.println(“这是字符串:“+sea7”);
字符串[]sealist=sea7.split(“,”);
System.out.println(“这是删除了重复项的字符串'end'”);
//从字符串的ArrayList中删除重复项。
ArrayList unique=移除的副本(密封列表);
for(字符串元素:唯一){
System.out.println(“-”+元素);
}
}

}

您的代码很好,但是如果顺序很关键,为什么不使用LinkedHashSet呢? 将元素添加到linkedhashset,然后按照添加的顺序将它们恢复,只需将条目作为toString()获取。返回的单词之间用逗号分隔,但它们可以很容易地删除。它看起来像“[a,Seal,God,to,sea,see,what…””

static ArrayList removeDuplicates(字符串[]列表){
//在哈希集中记录遇到的字符串。
LinkedHashSet=新LinkedHashSet();
//循环参数列表。
用于(字符串项:列表){
//为清晰起见,将此if语句保留在中(!需要)
如果(!set.contains(项目)){
设置。添加(项目);
}
}
字符串结果=set.toString();
返回(结果拆分(“,”);
}

如果我理解正确,请尝试,如果您的目标是从输入
中让一名水手出海,查看
输出
一名水手出海,查看一个循环中的
使用堆栈和推送,如果最后添加的字符串与之前添加的字符串重复,请不要添加,并且为了计算重复的索引,请使用另一组放置重复的索引ted索引。从i->N开始计算索引。要获取单词,请使用两个指针,一个指向单词的开头,另一个指向单词的结尾。
 static ArrayList<String> removeDuplicates(String[] list) {
      // Record encountered Strings in HashSet.
      LinkedHashSet<String> set = new LinkedHashSet<>();
      // Loop over argument list.
      for (String item : list) {
          // Left this if statement in for clarity (!needed)
          if (!set.contains(item)) {
              set.add(item);
           }
      }

      String result= set.toString(); 
      return(result.split(",");
   }