将扫描仪输入拆分为字符串

时间:2018-11-17 07:38:26

标签: java arrays string split java.util.scanner

一段时间以来,我一直在寻找答案,但是由于某种原因,它们似乎都不起作用。

public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);

    System.out.println("Please enter full name (last, first)");
    String[] personalInfo = scanner.next().split(", ");
    String firstName = personalInfo[1];
    String lastName = personalInfo[0];

    System.out.println("Your info: " +  firstName + " " + lastName);

有我的代码。我基本上是在尝试获取个人信息,这将是名字和姓氏。我想将名字和姓氏分成2个不同的字符串,但是每当尝试打印此字符串时,都会出现错误:

  

线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:索引1>超出长度1的范围   在Fines.main(Fines.java:11)​​

我很困惑,因为我什至像我应该的那样以0开始数组。.我只是不明白什么是错误的。

请帮助我-预先感谢!

3 个答案:

答案 0 :(得分:1)

  

线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:   索引1>在Fines.main(Fines.java:11)​​处长度1超出范围

因为personalInfo的大小是1而不是2

使用nextLine()代替next(),因为next()仅返回空格前的输入。

String[] personalInfo = scanner.next().split(", ");应该是

String[] personalInfo = scanner.nextLine().split(", ");

您可能想阅读本What's the difference between next() and nextLine() methods from Scanner class?

答案 1 :(得分:1)

您想要的是scaner.nextLine()从标准输入读取直到行尾。然后拆分将按预期工作。

Scanner scanner = new Scanner(System.in);

System.out.println("Please enter full name (last, first)");
String[] personalInfo = scanner.nextLine().split(", ");
String firstName = personalInfo[1];
String lastName = personalInfo[0];

System.out.println("Your info: " +  firstName + " " + lastName);

答案 2 :(得分:0)

try (Scanner scan = new Scanner(System.in)) {
    System.out.println("Please enter full name (last, first)");
    String firstName = scan.next();
    String lastName = scan.next();
    System.out.println("Your info: " + firstName + ' ' + lastName);
}

scanner.next()读取直到下一个定界符(默认为空格),因此仅准备firstName。只需将其替换为scanner.nextLine()或使用scanner.next()两次。