Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 sc.next()和sc.nextLine()的性能_Java_String_Next - Fatal编程技术网

Java sc.next()和sc.nextLine()的性能

Java sc.next()和sc.nextLine()的性能,java,string,next,Java,String,Next,我在Hackerrank上解决问题。在那里,我必须对大量数据进行排序。所以我所做的就是使用collection.sort方法并使用自定义比较器对数组进行排序。所以我的比较方法实际上是比较字符串,因为我不能使用int或double,因为数字的范围更大。我注意到,当我使用sc.nextLine()扫描时,它并没有通过所有测试用例。但是当我使用sc.next()时,它通过了所有测试用例。谁能告诉我这背后的原因吗 public static void main(String[] args) {

我在Hackerrank上解决问题。在那里,我必须对大量数据进行排序。所以我所做的就是使用collection.sort方法并使用自定义比较器对数组进行排序。所以我的比较方法实际上是比较字符串,因为我不能使用int或double,因为数字的范围更大。我注意到,当我使用sc.nextLine()扫描时,它并没有通过所有测试用例。但是当我使用sc.next()时,它通过了所有测试用例。谁能告诉我这背后的原因吗

    public static void main(String[] args) {
     Scanner sc=new Scanner(System.in);
     int x=sc.nextInt();sc.nextLine();

     List<String> list=new ArrayList();
     for(int i=0;i<x;i++){
         list.add(sc.next());
     }
    Collections.sort(list, (s1,s2) ->{
        if(s1.length()==s2.length())
           return s1.compareTo(s2);
           return s1.length()>s2.length()?1:-1;
                 } 
           );
     for(String str:list)
    System.out.println(str);


}
publicstaticvoidmain(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int x=sc.nextInt();sc.nextLine();
列表=新的ArrayList();
对于(int i=0;i{
如果(s1.length()==s2.length())
返回s1.compareTo(s2);
返回s1.length()>s2.length()?1:-1;
} 
);
for(字符串str:list)
系统输出打印项次(str);
}

您甚至不应该触摸这里的main方法?当到达delimeter时,next()停止输入,默认情况下,delimeter是一个空格,而nextline()在您按enter键时停止输入,因此空格也可以计数。我没有验证计时,但似乎
Scanner.nextline()已停止
使用的正则表达式在计算上比Scanner.next()使用的正则表达式更昂贵。但是:输入数据每行显示一项,因此读取输入的最快方法是使用
BufferedReader.readLine()