将String转换为二维数组

时间:2015-04-09 18:48:08

标签: java string multidimensional-array converter

我尝试转换此字符串

  

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.main(test.java:94)

你能帮我找一个解决方案吗?

5 个答案:

答案 0 :(得分:6)

我认为此代码会对您有所帮助。仔细阅读所有评论。

     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)替换所有[to&#34;&#34;现在我有 - &gt; 4,2,2,4],3,4,5,6],6,7,8,9],3,2,1,4]]

2)通过&#34;]分离全部,&#34;现在我有 - &gt;

A)4,2,2,4

B)3,4,5,6

c)6,7,8,9

d)3,2,1,4

3)通过&#34;,&#34;分离A B C D现在我有 - &gt;

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

答案 1 :(得分:1)

使用Java流的解决方案:

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);

答案 2 :(得分: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 + "}");
    }

答案 3 :(得分:0)

假设输入字符串将始终采用该格式,每个括号之间有4个整数,我认为最好的方法就是使用Scanner对象和它的nextInt( )方法将忽略括号和逗号,只是找到数字。然后将它们放入二维数组中,就像使用循环一样。

它有点消除了你移除括号所带来的所有乐趣,所以在进行练习方面它并没有真正好转。

答案 4 :(得分:0)

试试这个......

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