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'尝试它,但我遇到了一些问题。感谢您的建议。 –