Возможное решение. Он использует списки для сохранения данных массива. Если вам нужно, легко преобразовать список в реальный массив.
public void fileIfs(Path path) throws IOException {
try (Stream<String> lines = Files.lines(path, StandardCharsets.UTF_8)) {
// ------- read parameters -------
Pattern paramPattern = Pattern.compile("([A-Za-z]+)\\s+([\\w\\s]+)");
Matcher paramMatcher = paramPattern.matcher(lines.collect(Collectors.joining(",")));
Map<String, String> params = new HashMap<>();
while (paramMatcher.find()) {
params.put(paramMatcher.group(1), paramMatcher.group(2));
}
String name = params.get("name");
int affine = Integer.parseInt(params.get("affine"));
int scale = Integer.parseInt(params.get("scale"));
int height = Integer.parseInt(params.get("height"));
int width = Integer.parseInt(params.get("width"));
int xOffset = Integer.parseInt(params.get("xOffset"));
int yOffset = Integer.parseInt(params.get("yOffset"));
// ------- read array -------
List<List<Double>> affineList = new ArrayList<>();
Pattern arrayPattern = Pattern.compile("([\\-\\d]+\\.\\d+)");
lines.forEach(line -> {
Matcher arrayMatcher = arrayPattern.matcher(line);
List<Double> numbers = new ArrayList<>();
while (arrayMatcher.find()) {
numbers.add(Double.parseDouble(arrayMatcher.group(1)));
}
if (!numbers.isEmpty()) {
affineList.add(numbers);
}
});
// ---------------
System.out.println("params: " + params);
System.out.println("affineList: " + affineList);
}
}
Вывод:
params: {yOffset=112, xOffset=134, width=410, name=Golden Dragon, scale=500, affine=2, height=690}
affineList: [[0.62367, -0.40337, 0.40337, 0.62367, 0.0, 0.0, 0.75], [-0.37633, -0.40337, 0.40337, -0.37633, 1.0, 0.0, 0.25]]