Java Scanner拆分ArrayOutOfBounds

时间:2017-09-16 10:40:42

标签: java

当用户将某些参数输入到程序通过扫描程序接收的字符串时,我正在尝试创建具有不同行为的程序。我的问题是,我想让它好像用户没有写第二个参数,例如,程序应该仍然可以工作。

static String ReadString() {
        Scanner scan = new Scanner(System.in);
        return scan.nextLine();
    }
String command = ReadString();
String words[]=new String[4];
words[0]="empty";
words[1]="empty";
words[2]="empty";
words[3]="empty";
words  = command.split(" ");

问题是,如果我在用户只为该字符串写入一个参数后调用了单词[1],我仍然会得到错误ArrayOutOfBounds,尽管应该有一个值为&#34的字符串;为空#34;

实施例:  用户写道:ababbbbb command1>>>当我打电话给单词[1]时,它应该给我command1

用户写道:ababbbbb>>>当我打电话给单词[1]时,它应该给我空的

1 个答案:

答案 0 :(得分:1)

因为,当你在下面编写代码时,意味着words,这是String of String类型指向引用,它被分配内存以容纳4个字符串。

String words[]=new String[4];

现在,通过" "拆分创建数组的代码行下方只有大小1.现在,words变量引用已更改,只能保存1 String

words  = command.split(" ");

您需要进行以下更正:

   String command = ReadString();
   String words[]=new String[4];
   String[] n = command.split(" ");

   for(int i=0; i< 4; i++)
    {
      if((n.length-1)==i)
      {
         words[i]=n[i];
      }
      else
      {
         words[i]="empty";
      }
    }

<强>&GT;&GT;&GT; Demo&LT;&LT;&LT;