采取任意数量的空间分离输入直到新线

时间:2015-07-25 12:49:52

标签: java input

如何将未知数量的空格分隔整数作为输入,直到用户按下java中的输入并将每行的输入存储在单独的数组中。

例如:如果我有以下行作为输入,

1 2 3 4 5

2 4 6 8 10

然后一个数组存储第一行(比方说)arr1 = {1,2,3,4,5} 并且下一个数组存储第二行(比如)arr2 = {2,4,6,8,10}

我尝试使用scanner类来获取空格分隔的整数输入,但在遇到新行时无法切换到下一个数组。

3 个答案:

答案 0 :(得分:1)

我会做这样的事情:

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

public class Main {

    public static void main(String[] args) {
        List<Integer[]> l = new ArrayList<Integer[]>();
        Scanner s = new Scanner(System.in);
        System.out.println("How many rows will you enter?");
        int numOfRows = s.nextInt();
        for (int i = 0; i < numOfRows; i++) {
            String[] arr = s.nextLine().split(" ");
            Integer[] arr2 = new Integer[arr.length];
            for (int j = 0; j < arr.length; j++) {
                arr2[j] = Integer.parseInt(arr[j]);
            }
            l.add(arr2);
        }
        s.close();
        //Do whatever you want with l
    }
}

答案 1 :(得分:0)

首先,对于每行未知数量的整数,我建议使用较小的数据结构,可能是列表。

其次,如果你想读取行(使用它的方法readLine),BufferedReader似乎是更好的选择。读取一行后,您可以使用string.split(“”)来获取整数。

答案 2 :(得分:0)

获取输入直到空行,然后使用空格作为分隔符将行转到String数组。然后将每个元素解析为int并将其放入临时ArrayList<Integer>ArrayList<Integer>中已解析的整数将放在主ArrayList内。

ArrayList的结构将是ArrayList

ArrayList<Integer>
import java.util.*;

public class MultiLine {
    public static void main (String[] args) {

        Scanner sc = new Scanner( System.in );
        System.out.println("Input:");

        // main ArrayList
        ArrayList < ArrayList<Integer> > lst = new ArrayList < ArrayList<Integer> >();

        // input process
        while ( sc.hasNextLine() ) {

            String line = sc.nextLine();

            // stops input if line is empty
            if ( line.equals("") )
                break;

            // splits line to String array, using space as delimiter
            String[] splittedLine = line.split(" ");

            // temporary ArrayList that will parse each number from lines seperated by space
            ArrayList <Integer> temp = new ArrayList <Integer>();

            // parses each String of splittedLine to int, adds it to temp ArrayList
            for( String num : splittedLine ) {
                try {
                    temp.add( Integer.parseInt(num) );
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                }
            }

            // adds temp ArrayList to lst
            lst.add( temp );
        }
        System.out.println( lst );
    }
}

示例运行

Input:
1 2 3 4 5
2 4 6 8 10
12 14
895 623 1245 1

[[1, 2, 3, 4, 5], [2, 4, 6, 8, 10], [12, 14], [895, 623, 1245, 1]]