使用split函数将字符串转换为Java中的字符串数组的运行时错误

时间:2018-08-01 18:58:53

标签: java

 Exception in thread "main" java.util.NoSuchElementException: No line found
        at java.util.Scanner.nextLine(Scanner.java:1540)
        at Solution.main(Solution.java:94)

此代码是针对Hackerrank之一问题的解决方案。在Hackerrank上,他们正在使用scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");删除此异常。但是我想知道代码中的错误以及如何在不使用跳过功能的情况下删除异常。

    import java.util.*;
    class Solution
    {
        public static void minimumBribes(int q[])
        {
            int ans=0;
            for(int i=q.length-1;i>=0;i--)
            {
                if(q[i]-(i+1)>2)
                {
                    System.out.println("Too chaotic");
                    return;
                }
                for(int j=Math.max(0,q[i]-2);j<i;j++)
                {
                    if(q[j]>q[i])
                    {
                        ans++;
                    }
                }
            }
            System.out.println(ans);
        }
        public static void main(String[]args)
        {
            Scanner sc=new Scanner(System.in);
           Scanner sc1=new Scanner(System.in);
            int t=sc.nextInt();
            for(int i=0;i<t;i++)
            {
                int n=sc.nextInt();
                int q[]=new int[n];
                String[]str=sc1.nextLine().split(" ");

                for(int j=0;j<n;j++)
                {
                    q[j]=Integer.parseInt(str[j]);

                }
                minimumBribes(q);
            }
        }
    }

在上面的代码中,由于使用了NextLine,我遇到了错误,但是我希望输入采用这种格式。请帮助删除此例外。

1 个答案:

答案 0 :(得分:0)

如果使用正则表达式短语“(\ r \ n | [\ n \ r \ u2028 \ u2029 \ u0085])?”是已发布的解决方案,您不想跳过它,为什么不尝试

string.replaceAll("(\r\n|[\n\r\u2028\u2029\u0085])?", "")

在拆分之前,在nextLine()上。