【问题标题】:Convert String into a two dimensional array将String转换为二维数组
【发布时间】:2015-06-15 07:04:44
【问题描述】:

我尝试转换这个字符串

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)

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

【问题讨论】:

  • 第 94 行是哪一行?
  • 这条线矩阵[r1++] = row1.split(",");
  • 您是否查找了ArrayIndexOutOfBoundsException 以努力了解它是什么以及为什么会发生?您是否使用调试器单步执行代码?
  • 好的,我会尝试搜索
  • 我认为您在这里尝试更改错误的变量matrix[r1++] = row1.split(",");。不应该是matrix1吗?尝试使用变量名来解释变量的作用。

标签: java string multidimensional-array converter


【解决方案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】:

    我认为这段代码会对你有所帮助。仔细阅读所有 cmets。

         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();只是让结果更漂亮,对吧?
    【解决方案3】:

    试试这个...

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

    结果:

    【讨论】:

      【解决方案4】:

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

      不过,这有点摆脱了您在移除括号时所获得的所有乐趣,因此在进行练习方面并没有真正更好。

      【讨论】:

        【解决方案5】:

        这只是不在行尾添加逗号:

            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 + "}");
            }
        

        【讨论】:

          猜你喜欢
          • 2012-06-23
          • 1970-01-01
          • 2019-01-23
          • 2020-03-26
          • 2012-08-15
          • 2021-01-31
          • 2016-02-18
          • 2018-02-19
          相关资源
          最近更新 更多