自 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
直接做?
最佳答案
使用 jackson,但你必须用方框/括号替换大括号。
有了这个你不需要指定预期数组的维度
public static void main(String[] args) throws IOException {
String jsonString = "{{1.23,8.4}, {92.12,-0.57212}}";
jsonString = jsonString.replace("{", "[").replace("}", "]");
Double[][] doubles = new ObjectMapper().readValue(jsonString, Double[][].class);
System.out.println(Arrays.deepToString(doubles));
}
关于java - 将字符串转换为 double[][] - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38199057/