从字符串初始化java int 2d数组

Ger*_*ero 0 java arrays multidimensional-array

我有一个简单的二维数组

// Creating and Initializing 2D array
        int a[][] = {{0,1},{2,3},{4,5}};
        for(int i=0; i<3; i++) {
            for(int j=0; j<2; j++) {
                System.out.print(a[i][j]+" ");
            }
            System.out.println();
        }
Run Code Online (Sandbox Code Playgroud)

一切正常。但是,当内容是动态的并且来自变量时,如何初始化数组呢?

String arrContent = "{{0,1},{2,3},{4,5}}"; //actually a method readContentFromFile(); will deliver the content
int a[][] = arrContent;
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做到这一点吗?

Ale*_*nko 5

可以使用String::splitStream API 解析输入流:

  1. 获取以逗号分隔的行},{
  2. 使用删除多余的大括号String::replaceAll
  3. 对于每一行,用逗号分隔,将数字转换为 intStream::mapToInt并获取数组
  4. 收集到多维数组Stream::toArray
String arrContent = "{{0,1},{2,3},{4,5}}";

int[][] arr = Arrays.stream(arrContent.split("\\}\\s*,\\s*\\{")) //1
    .map(s -> s.replaceAll("[{}]", ""))                          //2
    .map(s -> Arrays.stream(s.split("\\s*,\\s*"))                //3
                    .mapToInt(Integer::parseInt).toArray()
    )
    .toArray(int[][]::new);                                      //4
    
System.out.println(Arrays.deepToString(arr));
Run Code Online (Sandbox Code Playgroud)

输出

[[0, 1], [2, 3], [4, 5]]
Run Code Online (Sandbox Code Playgroud)

另一种方法可能是使用 JSON 解析器,但是,需要修改初始输入字符串以成为有效的 JSON 数组(必须使用更简单的方法{}将大括号替换为方括号):[]String::replace(char old, char rep)

[[0, 1], [2, 3], [4, 5]]
Run Code Online (Sandbox Code Playgroud)