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)
有什么办法可以做到这一点吗?
可以使用String::splitStream API 解析输入流:
},{String::replaceAllStream::mapToInt并获取数组Stream::toArrayString 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)