在二维数组中使用split()方法?

时间:2018-03-09 15:15:27

标签: java arrays multidimensional-array

我想将输入作为带有空格的单行输入,然后将该数据输入到二维数组中。

String[][] examples = new String[100][100];
for (int i = 0; i < 2; i++) {
    System.out.println("enter line " + i);
    String line = sc.next();
    String[] linearr = line.split("\\s+");
    for (int j = 0; j < 5; j++) {
        examples[i][j] = linearr[j];
        System.out.println(linearr[j]);
    }
}

只有linearr[0]输入值...linearr[1] , linearr[2],所以不要获取值,而是指出索引越界。

3 个答案:

答案 0 :(得分:2)

declare @TableD TABLE (PeopleID int primary key, Name varchar(10)); INSERT INTO @TableD VALUES (1, 'Chris') , (2, 'Cliff') , (3, 'Heather'); declare @TableA TABLE (ThingID int primary key, ThingName varchar(10)) INSERT INTO @TableA VALUES (14, 'Bike') , (17, 'Trailer') , (18, 'Boat'); declare @TableF TABLE (PeopleID int, ThingID int, primary key (PeopleID, ThingID)); INSERT INTO @TableF VALUES (1, 18) , (1, 17) , (2, 14); SELECT D.Name, A.ThingName FROM @TableD D LEFT JOIN @TableF F JOIN @TableA A ON A.ThingID = F.ThingID ON F.PeopleID = D.PeopleID order by D.Name, A.ThingName; SELECT D.Name, A.ThingName FROM @TableF F JOIN @TableA A ON A.ThingID = F.ThingID right join @TableD D ON D.PeopleID = F.PeopleID order by D.Name, A.ThingName; Name ThingName ---------- ---------- Chris Boat Chris Trailer Cliff Bike Heather NULL 只返回第一个单词。

sc.next()返回整行。

而不是

sc.nextLine()

你可以做到

for(int j=0;j<5;j++)
{
    examples[i][j]=linearr[j];
    System.out.println(linearr[j]);
}

答案 1 :(得分:1)

您希望收到一行,但您当前的代码每个输入只会收到一个字。

而不是使用:

String line=sc.next();        //receive a word

将其更改为:

String line=sc.nextLine();    //receive a line
  

所以不要得到值而不是指数超出界限.....

而不是使用5,拆分中的String标记数可以用作内循环的循环控件,因此您可能需要:

for(int j=0; j < linearr.length; j++)

当输入中的单词少于5个时,这将阻止IndexOutOfBoundsException

答案 2 :(得分:1)

而不是sc.next()

 String line=sc.next();

您应该使用:

String line=sc.nextLine();
  

因为next()只能读取直到空格的输入,并且只能用于单个单词。如果你要阅读一行,你应该使用nextLine()

了解更多read this