将字符串转换为二维数组

11

我试图将这个字符串

s=[[4, 2, 2, 4], [3, 4, 5, 6], [6, 7, 8, 9], [3, 2, 1, 4]]
转换成像这样的二维数组
{4, 2, 2, 4},
{3, 4, 5, 6},
{6, 7, 8,9},
{3, 2, 1, 4}

使用以下代码实现:

 int e=s.replaceAll("\\[", "").replaceAll(" ","").replaceAll("],","]").length();
        String[] rows1 = s.replaceAll("\\[", "").replaceAll(" ","").replaceAll("],","]").substring(0, e-2).split("]");

        String[][] matrix1 = new String[4][4]; 
        int r1 = 0;
        for (String row1 : rows1) {
            matrix[r1++] = row1.split(",");
        }

        System.out.println(Arrays.deepToString(matrix1));

但是出现了这样的问题:

在主线程中出现异常:"main" java.lang.ArrayIndexOutOfBoundsException: 3, 在 test.java 的第94行。

你能帮我找到解决办法吗?


第94行是哪一行? - Norbert
这行代码是将row1字符串按逗号分隔后存入matrix数组中的第r1行。 - Phoenix
你是否查找了“ArrayIndexOutOfBoundsException”以努力理解它是什么以及为什么会发生?你是否使用调试器逐步执行代码? - tnw
好的,我会尝试搜索那个。 - Phoenix
我认为你试图修改错误的变量,应该是matrix1而不是matrix[r1++] = row1.split(",");。尝试使用能够在一定程度上解释变量作用的变量名。 - ug_
正如@ug_所指出的那样,您正在访问一个不存在的变量:matrix。我刚刚测试了您的代码,并通过将'matrix'更改为'matrix1'使其正常工作。 - Daniel Nugent
5个回答

9
我认为这段代码会对你有所帮助。仔细阅读所有的注释。
     String s="[[4, 2, 2, 4], [3, 4, 5, 6], [6, 7, 8, 9], [3, 2, 1, 4]]";
     s=s.replace("[","");//replacing all [ to ""
     s=s.substring(0,s.length()-2);//ignoring last two ]]
     String s1[]=s.split("],");//separating all by "],"

     String my_matrics[][] = new String[s1.length][s1.length];//declaring two dimensional matrix for input

     for(int i=0;i<s1.length;i++){
         s1[i]=s1[i].trim();//ignoring all extra space if the string s1[i] has
         String single_int[]=s1[i].split(", ");//separating integers by ", "

         for(int j=0;j<single_int.length;j++){
             my_matrics[i][j]=single_int[j];//adding single values
         }
     }

     //printing result
     for(int i=0;i<4;i++){
         for(int j=0;j<4;j++){
             System.out.print(my_matrics[i][j]+" ");
         }
         System.out.println("");
     }

[[4, 2, 2, 4], [3, 4, 5, 6], [6, 7, 8, 9], [3, 2, 1, 4]]

逻辑: 1)现在将所有的 "[" 替换为 "",现在我有 -> 4, 2, 2, 4], 3, 4, 5, 6], 6, 7, 8, 9], 3, 2, 1, 4]]

2)将所有内容以 "]," 分隔,现在我有 ->

A) 4, 2, 2, 4

B) 3, 4, 5, 6

c) 6, 7, 8, 9

d) 3, 2, 1, 4

3)将 A、B、C、D 按 ", " 分隔,现在我有 ->

A) a) 4 b) 2 c) 2 d) 4

B) a) 3 b) 4 c) 5 d) 6

c) a) 6 b) 7 c) 8 d) 9

d) a) 3 b) 2 c) 1 d) 4


这行代码:s1[i]=s1[i].trim(); 只是让结果更美观,对吗? - Phoenix

4

使用Java Streams的解决方案:

String[][] arr = Arrays.stream(str.substring(2, str.length() - 2).split("\\],\\["))
.map(e -> Arrays.stream(e.split("\\s*,\\s*"))
.toArray(String[]::new)).toArray(String[][]::new);

1
尝试一下这个...
String s="[[4, 2, 2, 4], [3, 4, 5, 6], [6, 7, 8, 9], [3, 2, 1, 4]]";

// Split on this delimiter
String[] rows = s.split("], \\[");
for (int i = 0; i < rows.length; i++) {
    // Remove any beginning and ending braces and any white spaces
    rows[i] = rows[i].replace("[[", "").replace("]]", "").replaceAll(" ", "");
}

// Get the number of columns in a row
int numberOfColumns = rows[0].split(",").length;

// Setup your matrix
String[][] matrix = new String[rows.length][numberOfColumns];

// Populate your matrix
for (int i = 0; i < rows.length; i++) {
    matrix[i] = rows[i].split(",");
}
// Display your matrix
System.out.println(Arrays.deepToString(matrix));

结果:

enter image description here


0

这只是没有在行末添加逗号:

    String s = "[[4, 2, 2, 4], [3, 4, 5, 6], [6, 7, 8, 9], [3, 2, 1, 4]]";
    for (String l: s.split("\\]\\s*,\\s*\\[")) {
        l = l.replaceAll("\\[", "").replaceAll("\\]", "");
        System.out.println("{" + l + "}");
    }

0

假设输入字符串始终以该格式出现,每个括号内有4个整数,我认为最好的方法是使用Scanner对象及其nextInt()方法,它将忽略括号和逗号,只查找数字。然后像循环一样将它们放入2D数组中。

这种方法消除了您通过删除括号所获得的所有乐趣,因此从这个角度来看并不更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接