0
我wan't寫一個解析器將返回原始(多維)陣列用於解析(多維)陣列的Java
double[][] returned = parse2D(Arrays.deepToString(new double[][]{{1,2}{3,4}}));
類似地,我希望的方法parse1D
,並且所述方法parse3D
,這將取決於其他解析器。
在編碼時遇到了幾個問題。
Scanner
會給令牌如「[1」和「4]」Scanner
使用useDelimiter("[(\\s*,\\s*)]")
不會保留多維數組的結構- 我似乎無法得到一個單一的
Pattern
到讓一個Matcher
捕獲正確的組 - 此外,我不應該寫我自己的解析器爲
double
。
下面的代碼我都吐了出來(書面)這類作品,但也接受字符串如"random crap before actual array [1]"
public static Tuple<Matcher, double[]> parse1D(String input) {
Pattern left = Pattern.compile("\\[");
Pattern right = Pattern.compile("\\]");
Pattern comma = Pattern.compile(",\\s*");
Pattern num = Pattern.compile("[[0-9]+E\\.\\-]+");
Matcher matcher = left.matcher(input);
matcher.find();
List<Double> l = new ArrayList<Double>();
matcher.usePattern(num);
while (matcher.find()) {
MatchResult result = matcher.toMatchResult();
l.add(Double.parseDouble(result.group()));
matcher.usePattern(comma);
matcher.find();
matcher.usePattern(num);
}
double[] ret = new double[l.size()];
int x = 0;
for (double d : l) {
ret[x] = d; x++;
}
return new Tuple<Matcher, double[]>(matcher, ret);
} // the matcher is also returned to be used by parse2D...
這應該是如此簡單!爲什麼我不能得到這個簡單的東西工作? 我應該自己寫一個解析器嗎?我應該得到一些解析器 - 組合器庫嗎? 怎麼辦?
你在用什麼解析?有沒有一個原因,你不能只是序列化成JSON,然後退出? –
@ericBarr我目前仍在學習JSON。它似乎爲我提供了必要的設備。我現在正在用'javax.json.stream'嘗試它,但我遇到了一些問題。感謝您的建議。 –