【发布时间】:2016-07-05 08:50:46
【问题描述】:
由于Java doesn't have an eval() module,我想编写自己的正则表达式来将字符串解析为double[][],例如
[输入]:
`{{1.23,8.4},{92.12,-0.57212}}`
`{{1.23,-8.4}, {-92.12,-0.57212}}`
[代码]:
double[][] xArr;
// Somehow read the string into something like this:
xArr = new double[][] {{1.23,8.4},{92.12,-0.57212}};
System.out.println(xArr[0][0] + " " + xArr[0][1]);
[出]:
1.23 -8.4
目前,我正在这样做:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
String s = "{{1.23,8.4}, {92.12,-0.57212}}";
Pattern regex = Pattern.compile("((-)?\\d+(?:\\.\\d+)?)");
Matcher matcher = regex.matcher(s);
List<double[]> locations = new ArrayList<double[]>();
int i = 0;
while(matcher.find()){
double d1 = Double.parseDouble(matcher.group(1));
matcher.find();
double d2 = Double.parseDouble(matcher.group(1));
locations.add(new double[] {d1, d2});
i++;
};
}
}
有没有更好的方法来做到这一点?即:
现在,代码有点作弊,因为知道我的 double[][] 的内部大小是 2 并且在迭代期间通过
match.find()。它执行 2 次传递以跳到下一对,有没有办法更改正则表达式,以便一次提取 2 个组?目前它正在读取
d1和d2变量,然后再创建一个新的double[]添加到List,有没有办法直接做到这一点而不创建d1和d2?
【问题讨论】:
-
如果您不关心性能,您可以使用 Java 中的 Javascript 引擎,例如:stackoverflow.com/a/2605051/2947592
-
@wvdz,如何将生成的
Object转换为double[][]? -
如何使用
matcher.groupCount()查找双精度数组的大小? -
您可以将其转换为
NativeArray,然后手动将其转换为double[][]。我认为这不是最好的方法,但如果您只需要快速修复,那么修复您的正则表达式可能会更容易。我认为使用正则表达式更好。
标签: java arrays string list double