我有一個簡單的二維陣列
//創建和初始化2D陣列。
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] " "/span>)。
}
System.out.println()。
}
作業一切正常。但是當內容是動態的并且來自一個變數時,我如何初始化陣列呢?
String arrContent = "{{0, 1},{2,3},{4,5}}"; //實際上一個方法readContentFromFile();將交付內容。
int a[][] = arrContent;
有什么方法可以做到這一點嗎?
uj5u.com熱心網友回復:
輸入流可以使用String::split和Stream API進行決議:
- 獲取在一對
},{之間用逗號分割的行
- 使用
String::replaceAll洗掉多余的大括號。
- 對于每一行,用逗號分割,將數字轉換為int
Stream::mapToInt并得到陣列 。
- 用
Stream::toArray收集成多維陣列。
String arrContent = "{{0, 1},{2,3},{4,5}}";
int[][] arr = Arrays.stream(arrContent.split("}s*,s*{") /1
.map(s -> s.replaceAll("[{}]"/span>, "") /2
.map(s -> Arrays.stream(s.split("s*, s*") /3
.mapToInt(Integer::parseInt).toArray()
)
.toArray(int[][]:new); /4
System.out.println(Arrays.deepToString(arr))。
輸出
[[0, 1], [2, 3], [4, 5] ]
另一種方法是使用JSON決議器,然而,最初的輸入字串需要被修改,以成為一個有效的JSON陣列(大括號{}必須被替換成方括號[],使用更簡單的String::replace(char old, char rep)):
String arrContent = "{{0, 1},{2,3},{4,5}}";
ObjectMapper om = new ObjectMapper()。
int[][] arr = om.readValue(
arrContent.replace('{'/span>, '['/span>)
.replace('}', '] ')。
int[][].class)。)
System.out.println(Arrays.deepToString(arr))。
// output
[[0, 1], [2, 3], [4, 5]]
uj5u.com熱心網友回復:
我只是想用簡單的regexp提供一個小小的修改方案,以防有人喜歡這樣做:
String input = "{{0, 1},{2,3},{4,5}}";
Pattern pattern = Pattern.compile("{{[0-9,] }") 。
int[][] array = pattern.matcher(input).results()
.map(matchResult -> matchResult.group().replaceAll("[{}]", ")
.map(numberAsText -> Arrays.stream(numberAsText.split(",")) .mapToInt(Integer::parseInt).toArray()
.toArray(int[][]:new)。)
就像其他人指出的那樣--如果你有可能改變輸入的形狀--我也建議使用JSON的陣列,并使用JSON決議器來決議它,這將使它更容易和更干凈。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/332258.html
標籤:
