Java 如何在没有空白的情况下通过输入字符串设置2维数组?

Java 如何在没有空白的情况下通过输入字符串设置2维数组?,java,Java,这是我的代码: Scanner sc = new Scanner(System.in); int size = sc.nextInt(); String[][] s = new String[size][size]; for (int row = 0; row < s.length; row++) { for (int col = 0; col < s[row].length; col++) { s[row][

这是我的代码:

    Scanner sc = new Scanner(System.in);
    int size = sc.nextInt();
    String[][] s = new String[size][size];

    for (int row = 0; row < s.length; row++) {
        for (int col = 0; col < s[row].length; col++) {
            s[row][col] = sc.next();
        }
    }
    for (int row = 0; row < s.length; row++) {
        for (int col = 0; col < s[row].length; col++) {
            System.out.print(s[row][col] + " ");
        }
        System.out.println();
    }
输出如下所示:

a b c
a b c
a b c
3
abc
abc
abc
3
abc
abc
abc
3
abc
abc
abc
所以我想知道当我这样输入时,如何更改代码以获得相同的输出:

a b c
a b c
a b c
3
abc
abc
abc
3
abc
abc
abc
3
abc
abc
abc
试试这个

int size = sc.nextInt();
String[][] s = new String[size][];

for (int row = 0; row < s.length; row++) {
    s[row] = sc.next().split("");
}
for (int row = 0; row < s.length; row++) {
    for (int col = 0; col < s[row].length; col++) {
        System.out.print(s[row][col] + " ");
    }
    System.out.println();
}
int size=sc.nextInt();
字符串[][]s=新字符串[大小][];
对于(int row=0;row
java.util.Scanner.next()方法查找并返回来自此扫描仪的下一个完整令牌。完整标记的前面和后面是与分隔符模式匹配的输入。因此,扫描器使用分隔符模式将其输入拆分为标记,默认情况下,分隔符模式与空白匹配。 您必须使用某种分隔符。例如,您可以将分隔符设置为“,”

Scanner sc = new Scanner(System.in);
        sc.useDelimiter(",");
那么您的输入应该是这样的:

3,
a,b,c,
a,b,c,
a,b,c,
Scanner sc = new Scanner(System.in);
        sc.useDelimiter("\\n");

        int size = sc.nextInt();
        String[][] s = new String[size][size];

        for (int row = 0; row < s.length; row++) {
            String input = sc.next();
            for (int col = 0; col < s[row].length; col++) {

                    s[row][col] = String.valueOf(input.toCharArray()[col]);
            }
        }


        for (int row = 0; row < s.length; row++) {
            for (int col = 0; col < s[row].length; col++) {
                System.out.print(s[row][col] + " ");
            }
            System.out.println();
        }

    }
您的输出将是:

a b c 

a b c 

a b c 
在您的情况下,如果您希望像这样接受输入:

a b c
a b c
a b c
3
abc
abc
abc
3
abc
abc
abc
3
abc
abc
abc
然后一个接一个地提取字符,你不能这样做,因为你必须指定一些分隔符,正如我所说的,如果你不这样做,默认的分隔符将被提取

但是,您可以编写一个变通代码,如下所示:

3,
a,b,c,
a,b,c,
a,b,c,
Scanner sc = new Scanner(System.in);
        sc.useDelimiter("\\n");

        int size = sc.nextInt();
        String[][] s = new String[size][size];

        for (int row = 0; row < s.length; row++) {
            String input = sc.next();
            for (int col = 0; col < s[row].length; col++) {

                    s[row][col] = String.valueOf(input.toCharArray()[col]);
            }
        }


        for (int row = 0; row < s.length; row++) {
            for (int col = 0; col < s[row].length; col++) {
                System.out.print(s[row][col] + " ");
            }
            System.out.println();
        }

    }
您应该看到以下输出:

a b c 
a b c 
a b c 

嗯,这是最简单的方法。如果需要,它还允许每行具有不同的长度

Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
// clear the previous new line
sc.nextLine();
//initialize the number of rows.
String[][] s = new String[size][];

// enter the rows
for (int rows = 0; rows < size; rows++) {
    String row = sc.nextLine();
    // split between each character
    s[rows] = row.split("");
}

//print the matrix
for (String[] row : s) {
    System.out.println(String.join(" ",row));
}
印刷品

a b c
d e f
g h i

您不需要将每一行项目复制到矩阵中。只需将split的输出分配给
s[row]
。这也意味着您可以将
s
初始化为
String[][]s=新字符串[size][]@WJS谢谢。