创建一个类来保存您的数据对象:
private static final class Data {
private final BigDecimal point;
private final Date date;
public Data(final String point, final String date) {
this.point = new BigDecimal(point);
this.date = new Date(Long.parseLong(date));
}
@Override
public String toString() {
return "Data{" + "point=" + point + ", date=" + date + '}';
}
}
现在使用正则表达式模式解析字符串,随时构建Data
对象。我使用了所有格匹配器,因为String
它可能很长,并且您不希望快速引擎沿着它反复回溯以尝试匹配。
就像这里Data
一样,甚至可以将单个String
s 解析为真实的数据类型。
public static void main(String[] args) {
final String s = "[14.1,1363649400],[14.4,1363650300],[14.6,1363651200],[15.1,1363652100],[14.3,1363653000],[14.2,1363653900],[14.8,1363654800]";
final Pattern p = Pattern.compile("\\[([^,]++),(\\d++)\\]");
final Matcher matcher = p.matcher(s);
final Collection<Data> datas = new LinkedList<Data>();
while (matcher.find()) {
datas.add(new Data(matcher.group(1), matcher.group(2)));
}
for (final Data data : datas) {
System.out.println(data);
}
}
输出:
Data{point=14.1, date=Fri Jan 16 19:47:29 GMT 1970}
Data{point=14.4, date=Fri Jan 16 19:47:30 GMT 1970}
Data{point=14.6, date=Fri Jan 16 19:47:31 GMT 1970}
Data{point=15.1, date=Fri Jan 16 19:47:32 GMT 1970}
Data{point=14.3, date=Fri Jan 16 19:47:33 GMT 1970}
Data{point=14.2, date=Fri Jan 16 19:47:33 GMT 1970}
Data{point=14.8, date=Fri Jan 16 19:47:34 GMT 1970}
显然,您可以将它们Data
放入Map
或Set
或任何适合您的东西中。