【发布时间】:2020-06-14 01:04:50
【问题描述】:
注意: 问题是从 json 字符串创建数字流,最好使用正则表达式。请不要将该问题视为与正则表达式中其他内容的重复。我的主要目标是读取一串数字。为此目的使用正则表达式是可选的。
我的目标是创建一个从大型 json 字符串中读取的十进制数字数组,如下所示。
输入示例:
{
"item1": 102.119,
"item2": "unknown",
"item3": 200.12,
"item4": 1.08,
"item5": 0.04
}
预期输出:
我的数据 = [102.119, 200.12, 1.08, 0.04]
我尝试了什么:
import java.util.ArrayList;
public class MyData {
public static void main(String[] args) {
String input = ("{\"item1\": 102.119,"
+ "\"item2\": \"unknown\","
+ "\"item3\": 200.12,"
+ "\"item4\": 1.08,"
+ "\"item5\": 0.04}"
);
ArrayList<Double> output = new ArrayList<>();
for(String s1 : input.split(",")) {
for(String s2: s1.split(":")) {
try {
output.add(Double.parseDouble(s2));
} catch(Exception e) {
System.out.println(e.toString() + " : " + s2 + " is not a number!");
}
}
}
System.out.println("\nMy Data = " + output.toString());
}
}
实际输出:
$ javac MyData.java
$ java MyData
java.lang.NumberFormatException: For input string: "{"item1"" : {"item1" is not a number!
java.lang.NumberFormatException: For input string: ""item2"" : "item2" is not a number!
java.lang.NumberFormatException: For input string: ""unknown"" : "unknown" is not a number!
java.lang.NumberFormatException: For input string: ""item3"" : "item3" is not a number!
java.lang.NumberFormatException: For input string: ""item4"" : "item4" is not a number!
java.lang.NumberFormatException: For input string: ""item5"" : "item5" is not a number!
java.lang.NumberFormatException: For input string: "0.04}" : 0.04} is not a number!
My Data = [102.119, 200.12, 1.08]
问题:
- 最终数字 0.04 未读入数据数组。
- 两个 for 循环在大型输入集上执行需要很长时间。
需要帮助:
您能否帮助改进代码以更有效地读取所有十进制数字?
能否告诉我正则表达式模式匹配是否可以用于这种情况?
【问题讨论】:
-
我不明白为什么这个问题被认为是正则表达式的重复。我想从json中读取数字作为流,最好只使用正则表达式。由于此问题已作为副本关闭,我现在无法找到答案。有人可以帮助重新打开问题,以便我得到答案吗?
标签: java arrays json stream double