我有個問題。對于我的代碼,我有一個包含以下內容的組態檔:
updateOnInsert=true
removeLast=false
names=Joey Greek, Lisa Blessing, Arnold Verdict
要讀取此組態檔,我有以下代碼:
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
InputStream is = classloader.getResourceAsStream("configs/main.config");
// Read all properties from agent strategy file
Properties properties = new Properties();
properties.load(is);
// Assign all properties to variables
boolean updateOnInsert = Boolean.parseBoolean(properties.getProperty("updateOnInsert"));
boolean removeLast = Boolean.parseBoolean(properties.getProperty("removeLast"));
List<String> names = Arrays.asList(properties.getProperty("names").split(", ", -1));
但現在我需要將名稱的格式更改為:
names=[[Joey, Greek], [Lisa, Blessing], [Arnold, Verdict]]
輸出變數必須是以下型別:String[][]結果:
[0] => [Joey, Greek]
[1] => [Lisa, Blessing]
[2] => [Arnold, Verdict]
實作這一目標的最佳方法是什么?
uj5u.com熱心網友回復:
取決于輸入的外觀。最安全的方法可能是使用適當的決議器(也可能是不同的檔案格式)。
如果串列總是在表單中[[Name], [Name]]并且Name從不包含括號,一個簡單的方法是使用更專業的正則運算式,例如(?<=\]),\s*(?=\[).
正則運算式概述:
(?<=\]): 正向后視,即任何匹配都必須遵循].,\s*: 要在(并洗掉)處拆分的實際匹配項,即逗號后跟任何空格(?=\[)"): 一個積極的前瞻,即任何匹配必須后跟一個[。
最后,將每個名稱拆分,為 2D 陣列:
//results in Strings like "[Joey, Greek]", "[Lisa, Blessing]", and "[Arnold, Verdict]"
String[] completeNames = properties.getProperty("names").split("(?<=\\]),\\s*(?=\\[)");
//We're using a stream here but you could as well use traditional loops
String[][] namesInParts = Arrays.stream(completeNames)
//map the name by removing the brackets and splitting at the comma (followed by any whitespace)
.map(name -> name.replaceAll("[\\]\\[]", "").split(",\\s*"))
//collect everything into a new array
.toArray(String[][]::new);
uj5u.com熱心網友回復:
嘗試類似:
String[][] names = Pattern.compile(", ", -1)
.splitAsStream(properties.getProperty("names"))
.map(s -> s.split(" "))
.toArray(String[][]::new);
uj5u.com熱心網友回復:
- 給定姓名串列,首先流式傳輸姓名串列。
- 然后在一個或多個空格上拆分名稱。
- 并將結果陣列放入“二維”陣列中
List<String> names = Arrays.asList(properties.getProperty("names").split(", ", -1));
String[][] result = names.stream().map(str->str.split("\\s ")).toArray(String[][]::new);
您可以通過流式傳輸從屬性檔案中讀取的原始串列,使其成為單個陳述句。我省略了它以簡化解釋。
uj5u.com熱心網友回復:
你可以改變
List<String> names = Arrays.asList(properties.getProperty("names").split(", ", -1));
到
List<List<String>> names = Arrays.stream(properties.getProperty("names").split(", ", -1)).map(subNames -> Arrays.asList(subNames.split(" "))).collect(Collectors.toList());
讓我知道這是否是預期的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/352783.html
上一篇:JavaBase64編碼丟失資料
