Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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 LinkedHashSet似乎留下了一个重复的元素_Java - Fatal编程技术网

Java LinkedHashSet似乎留下了一个重复的元素

Java LinkedHashSet似乎留下了一个重复的元素,java,Java,我很好奇是否有人知道为什么LinkHashSet中的第一个元素似乎允许重复?我正在对CodeEval进行代码挑战,当我输入值2、2、3、3、4、4、5、5、6时,程序的输出显示2、2、3、4、5、6,这只是导致问题的第一个元素 我正在使用jre 1.8.045。我厌倦了解决这个问题,并检查了挑战,网站接受了我的解决方案,所以我想知道我的Java版本中是否有bug。我搜索过,没有看到任何人在LinkHashSet生成重复项方面有问题的帖子 import java.util.Arrays; impo

我很好奇是否有人知道为什么LinkHashSet中的第一个元素似乎允许重复?我正在对CodeEval进行代码挑战,当我输入值2、2、3、3、4、4、5、5、6时,程序的输出显示2、2、3、4、5、6,这只是导致问题的第一个元素

我正在使用jre 1.8.045。我厌倦了解决这个问题,并检查了挑战,网站接受了我的解决方案,所以我想知道我的Java版本中是否有bug。我搜索过,没有看到任何人在LinkHashSet生成重复项方面有问题的帖子

import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;


public class UniqueElements 
{

    public static void main(String[] args) {
        Scanner  s = new Scanner(System.in);
        String line = s.nextLine();

        List<String> list = Arrays.asList(line.trim().split(","));

        Set<String> string = new LinkedHashSet<>(list);

        Iterator<String> iter = string.iterator();

         while (true) 
         {
             System.out.print(iter.next());

             if (iter.hasNext()) {
                 System.out.print(",");
             } else {
                 System.out.println();
                 break;
             }
         }

    }
}
导入java.util.array;
导入java.util.Iterator;
导入java.util.LinkedHashSet;
导入java.util.List;
导入java.util.Scanner;
导入java.util.Set;
公共类单元
{
公共静态void main(字符串[]args){
扫描仪s=新的扫描仪(System.in);
字符串行=s.nextLine();
List List=Arrays.asList(line.trim().split(“,”);
Set string=newlinkedhashset(列表);
迭代器iter=string.Iterator();
while(true)
{
System.out.print(iter.next());
if(iter.hasNext()){
系统输出打印(“,”);
}否则{
System.out.println();
打破
}
}
}
}
您的问题在于:

List<String> list = Arrays.asList(line.trim().split(","));
List List=Arrays.asList(line.trim().split(“,”);
它创建一个列表,其中第一个元素是
“2”
,第二个元素是
“2”
(注意前导空格)

您需要在“
”、“
或“
”\\s*、\\s*”
上删除输入或拆分中的空格,以便在逗号前后留出空格。

您的问题在于:

List<String> list = Arrays.asList(line.trim().split(","));
List List=Arrays.asList(line.trim().split(“,”);
它创建一个列表,其中第一个元素是
“2”
,第二个元素是
“2”
(注意前导空格)


您需要从输入中删除空格或在“
”、“
或“
”\\s*、\\s*”
上拆分空格,以便在逗号前后留出空格。

您明智地使用了
trim()
方法,但列表项之间没有得到所有空格。您是否注意到输出列表中的数字之间有空格,但您的输出
println
没有插入任何空格

第一个“2”没有前导空格。第二个“2”有一个前导空格。这使得它们不同于
字符串。摆脱空间,摆脱问题

split()
上使用不同的正则表达式会有所帮助。
.split(“,\\s*”)
怎么样


另一个选项:首先为什么要使用
String
值?如果它们都是数字并且保证是数字(挑战会说明这一点),那么转换为
数字(或者甚至
整数,如果这是保证的话)将使多余的空格变得无关。

您明智地使用了
trim()
方法,但是您并没有从列表条目之间获得所有的空白。您是否注意到输出列表中的数字之间有空格,但您的输出
println
没有插入任何空格

第一个“2”没有前导空格。第二个“2”有一个前导空格。这使得它们不同于
字符串。摆脱空间,摆脱问题

split()
上使用不同的正则表达式会有所帮助。
.split(“,\\s*”)
怎么样


另一个选项:首先为什么要使用
String
值?如果它们都是数字并且保证是这样的(挑战会说明这一点),那么转换成
数字(或者甚至
整数,如果这是保证的话)将使无关的空格变得不相关。

似乎不会重现,尽管有奇怪的循环。
数组.asList(line.trim().split(“,”)
:此处的逻辑错误
trim()
仅删除整行的前导空格和尾随空格,而不是单个数字。因此,您的集合包含两个字符串
2
2
,这两个元素是唯一的。尽管存在奇怪的循环,但它们似乎没有复制。
Arrays.asList(line.trim().split(,”)
:您的逻辑在这里是错误的
trim()
仅删除整行的前导空格和尾随空格,而不是单个数字。因此,您的集合包含字符串
2
2
,这两个元素是唯一的。谢谢,在拆分中添加“\\s*,\\s*”修复了问题。谢谢,在拆分中添加“\\s*,\\s*”修复了问题。