0

Can anyone please help me with the code as how to read multiple lines from console and store it in array list? Example, my input from the console is:

12     abc      place1
13     xyz      place2

and I need this data in ArrayList.

So far I tried this code:

Scanner scanner = new Scanner(System.in);
ArrayList informationList = new ArrayList<ArrayList>();
String information = "";
int blockSize = 0, count = 1;
System.out.println("Enter block size");
blockSize = scanner.nextInt();
System.out.println("Enter the Information ");
while (scanner.hasNext() && blockSize >= count) {
    scanner.useDelimiter("\t");
    information = scanner.nextLine();
    informationList.add(information);
    count++;
}

Any help is greatly appreciated.

Input line from console is mix of string and integer

4

1 回答 1

2

你有几个问题。

首先,您的 ArrayList 的初始化行是错误的。如果您想要一个对象列表以便同时保存整数和字符串,则需要放在Object尖括号内。此外,最好将泛型类型参数添加到变量定义中,而不仅仅是在对象实例化中。

接下来,您的计数变得混乱,因为您将其初始化为 1 而不是 0。我假设“块大小”实际上是指此处的行数。如果那是错误的,请发表评论。

接下来,您不想重置 Scanner 正在使用的分隔符,并且您当然不想在循环中执行此操作。默认情况下,扫描器将根据我认为您想要的任何空格分解令牌,因为您的数据由制表符和换行符分隔。

此外,您不需要在 while 条件下检查 hasNext() 。所有 next*() 方法都将阻塞等待输入,因此不需要调用 hasNext()。

最后,您并没有真正利用 Scanner 来做它最擅长的事情,即将令牌解析为您想要的任何类型。我在这里假设每个数据行都以一个整数开头,然后是两个字符串。如果是这种情况,只需调用 nextInt(),然后在循环内调用两次 next(),您将自动将所有数据解析为您需要的数据类型。

总而言之,这里是你的代码更新了我的所有建议以及其他一些让它运行的代码:

import java.util.ArrayList;
import java.util.Scanner;

public class Example {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Object> list = new ArrayList<>();
        System.out.println("Enter block size");
        int blockSize = scanner.nextInt();
        System.out.println("Enter data rows:");
        int count = 0;
        while (count < blockSize) {
            list.add(scanner.nextInt());
            list.add(scanner.next());
            list.add(scanner.next());
            count++;
        }
        System.out.println("\nThe data you entered is:");
        System.out.println(list);
    }
}
于 2012-07-23T22:58:31.290 回答