为什么System.Out.println [array [1]);使用String.split使得数组超出范围?

时间:2018-12-14 14:49:31

标签: java arrays input text

这是我正在从事的项目的一些基本代码的片段:

System.out.println("ENter a paragraph:")
String input = sc.next();
String[] ArrayIn = new String[100];
ArrayIn = input.split("\\.");

然后我使用ArrayIn [i]进行基本的for循环。

for (int i = 0; i < ArrayIn.length; i++) {
    System.out.println(ArrayIn[i]);
}

但是句子上的任何内容,例如我喜欢肉。我喜欢牛肉会打印出我喜欢肉,然后给我一个错误。我只是一个初学者,所以我不知道Java的所有内容。你能给我一个简单的解释吗?谢谢。

3 个答案:

答案 0 :(得分:1)

更改您的for loop,使用此

// split phrases by '.'
String[] sentences= input.split("\\.");
for(int i = 0; i < sentences.length; i++) {
    System.out.println(sentences[i]);
}

您的问题是您正在使用sc.next()。这意味着,当您的输入为hello world. bye时,它将把它当作3个不同的输入,并用空格['hello', 'world.', 'bye']隔开。您应该改用sc.nextLine()。那么完整的代码将是

Scanner sc = new Scanner(System.in);
System.out.println("ENter a paragraph:");
String input = sc.nextLine();
String[] sentences = input.split("\\.");
for (int i = 0; i < sentences.length; i++) {
    System.out.println(sentences[i]);
}

答案 1 :(得分:0)

代码中唯一的问题是这一行:

String input = sc.next();

应更改为:

String input = sc.nextLine();

因为您想分割整行。
这些行:

String[] ArrayIn = new String[100];
ArrayIn = input.split("\\.");

不产生任何错误,但可以合并到:

String[] ArrayIn = input.split("\\.");

所以我看不到为什么您发布的代码有任何错误。
也许这不是全部代码。

答案 2 :(得分:0)

next()只能读取输入,直到空格为止。它无法读取两个用空格隔开的单词。另外,next()在读取输入后将光标置于同一行。

nextLine()读取包含单词之间的空格的输入(即,读取直到\ n行的末尾)。读取输入后,nextLine()会将光标置于下一行。

这就是为什么使用: sc.nextLine()