java - 如何在java中使用nextLine获取多个输入

标签 java

运行以下代码时出现错误“线程“main”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0” 我想知道 next() 和 nextLine() 方法之间的区别。

        //Scanner
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int arr[] = new int[n];
        for(int i=0;i<n;i++){
            arr[i] = sc.nextInt();
        }
        int q=sc.nextInt();
        String str[] = new String[q];
        for(int i=0;i<q;i++)
        {
            str[i] = sc.nextLine();
        }
        sc.next();
        for(int i=0;i<q;i++){
            System.out.println(str[i]);
            if(str[i].charAt(0) == 'I' ){
               String s1[] = str[i].split("\\s+");`enter code here`
               System.out.println(s1[0]);`enter code here`
            int value = Integer.valueOf(s1[1]);
            arr[value]+= 1;
            }
            if(str[i].charAt(0) == 'U'){
                String aa ="aman 2";
                String s2[]= aa.split("\\s+");
                int pos = Integer.valueOf(s2[1]);  
                int val = Integer.valueOf(s2[2]);
                arr[pos] = val;
            }
            if(str[i].equalsIgnoreCase("left"))
                {
                    int j = 0;
                    int tmp = arr[0];
                    for(j=0;j<n-1;j++){
                        arr[j]=arr[j+1];
                    }
                    arr[j]=tmp;
                }
            if(str[i].equalsIgnoreCase("right")){
                  int k = 0;
                    int temp = arr[0];
                    for(k=0;k<n-1;k++){
                        arr[k]=arr[k+1];
                    }
                    arr[k]=temp;
            }
            if(str[i].equals('?')){
                String s4[] = str[i].split("\\s+");
                int position = Integer.valueOf(s4[1]);
                System.out.println(arr[position]);
            }
        }

最佳答案

我认为问题出在下面一行:

if(str[i].charAt(0) == 'I' ){

如果str是空字符串,则无法获取第一个字符。您可以使用 .isEmpty() 测试字符串是否为空。

Scanner#nextLine()InputStream 读取(如名称所示)下一行(在您的情况下为 System.in) .

Scanner#next() 可以读取下一行,但也可以少读。它会读取直到达到特定的分隔符。

您可以配置分隔符。默认情况下,它按空格、换行符等分隔符分隔。

关于java - 如何在java中使用nextLine获取多个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60585968/

相关文章:

java - 跨域javascript函数调用?

java - 是否可以在返回类型上添加注释

java - 对每行中包含多个单词并在 Java 中用换行符分隔的字符串进行排序的最佳方法是什么?

java - Circle 实现 - 如何建模以获取此信息

java - importNode 抛出异常 org.w3c.dom.DOMException

java - Jboss AS中数据库连接关闭

java - 检查是否使用 ASM 调用方法

java - 在 Debug模式下,我可以看到额外的数组列表元素并初始化为零

java - 在 OSX 中运行 CMD 等效项?

java - PDF 文件打不开