这是数据查询的数据。
[{pjcj=161.0, CESHIRIQI=2011, SUOSHUQUYU=通州区}, {pjcj=166.0, CESHIRIQI=2012, SUOSHUQUYU=通州区}, {pjcj=159.5, CESHIRIQI=2014, SUOSHUQUYU=通州区}, {pjcj=180.0, CESHIRIQI=2015, SUOSHUQUYU=通州区}, {pjcj=140.5, CESHIRIQI=2016, SUOSHUQUYU=东城区}, {pjcj=167.94, CESHIRIQI=2016, SUOSHUQUYU=密云区}, {pjcj=169.45, CESHIRIQI=2016, SUOSHUQUYU=房山区}, {pjcj=161.91, CESHIRIQI=2016, SUOSHUQUYU=昌平区}, {pjcj=166.75, CESHIRIQI=2017, SUOSHUQUYU=亦庄经济开发区}, {pjcj=162.63, CESHIRIQI=2017, SUOSHUQUYU=延庆}, {pjcj=163.21, CESHIRIQI=2017, SUOSHUQUYU=怀柔区}, {pjcj=166.43, CESHIRIQI=2017, SUOSHUQUYU=石景山区}, {pjcj=164.08, CESHIRIQI=2017, SUOSHUQUYU=通州区}, {pjcj=167.53, CESHIRIQI=2017, SUOSHUQUYU=门头沟区}, {pjcj=164.37, CESHIRIQI=2017, SUOSHUQUYU=顺义区}, {pjcj=166.58, CESHIRIQI=2017, SUOSHUQUYU=首都职工体质促进中心}]
这是日期去重后的集合。
[2011, 2012, 2014, 2015, 2016, 2017]
这是现在得到的数据,
{首都职工体质促进中心=[166.58], 怀柔区=[163.21], 房山区=[169.45], 门头沟区=[167.53], 石景山区=[166.43], 东城区=[140.5], 昌平区=[161.91], 亦庄经济开发区=[166.75], 延庆=[162.63], 密云区=[167.94], 顺义区=[164.37], 通州区=[161.0, 166.0, 159.5, 180.0, 164.08]}
举例,日期集合长度是6.首都职工体质促进中心=166.58,是2017年的数据。就得到这样的的集合,首都职工体质促进中心=[0,0,0,0,0,166.58],
通州区=[161.0, 166.0, 159.5, 180.0, 0,164.08],是11,12,13,14,15,17年的数据, 16年没有就补零。 通州区=[161.0, 166.0, 159.5, 180.0, 0,164.08]
static Map<String,double[]> result=new HashMap<String,double[]>();//定义数据结构
public static void main(String[] args) {//oldStr就是你的数据
String oldStr="[{pjcj=161.0, CESHIRIQI=2011, SUOSHUQUYU=通州区}, {pjcj=166.0, CESHIRIQI=2012,SUOSHUQUYU=通州区}, {pjcj=159.5, CESHIRIQI=2014, SUOSHUQUYU=通州区}, {pjcj=180.0, CESHIRIQI=2015, SUOSHUQUYU=通州区}, {pjcj=140.5, CESHIRIQI=2016, SUOSHUQUYU=东城区}, {pjcj=167.94, CESHIRIQI=2016, SUOSHUQUYU=密云区}, {pjcj=169.45, CESHIRIQI=2016, SUOSHUQUYU=房山区}, {pjcj=161.91, CESHIRIQI=2016, SUOSHUQUYU=昌平区}, {pjcj=166.75, CESHIRIQI=2017, SUOSHUQUYU=亦庄经济开发区}, {pjcj=162.63, CESHIRIQI=2017, SUOSHUQUYU=延庆}, {pjcj=163.21, CESHIRIQI=2017, SUOSHUQUYU=怀柔区}, {pjcj=166.43, CESHIRIQI=2017, SUOSHUQUYU=石景山区}, {pjcj=164.08, CESHIRIQI=2017, SUOSHUQUYU=通州区}, {pjcj=167.53,CESHIRIQI=2017, SUOSHUQUYU=门头沟区}, {pjcj=164.37, CESHIRIQI=2017, SUOSHUQUYU=顺义区}, {pjcj=166.58, CESHIRIQI=2017, SUOSHUQUYU=首都职工体质促进中心}]";
Pattern pn = Pattern.compile("(?<=\\{)[^\\{&&[^\\}]]+(?=\\})");
Matcher mpn = pn.matcher(oldStr);
while (mpn.find()) {
String subGroup=mpn.group(); //获得每一个区域的原始数据,形如pjcj=161.0, CESHIRIQI=2011, SUOSHUQUYU=通州区
String name="",data="",year="";
String[] itemArray=subGroup.split(",");
Pattern pattern=Pattern.compile("(?<==)[^A-Z]+");
Matcher mname=pattern.matcher(itemArray[2]);
Matcher mdata=pattern.matcher(itemArray[0]);
Matcher myear=pattern.matcher(itemArray[1]);
if(mname.find())
name=mname.group();
if(mdata.find())
data=mdata.group();
if(myear.find())
year=myear.group();
add(name,year,data);
}
System.out.println(JSON.toJSON(result));
}
private static void add(String name,String year,String data){
double[] dataArray=null; //dataArray是都double型容量为7的数组,分别代表11,12,13,14,15,16,17
if(!(result.isEmpty())&&result.containsKey(name)){
dataArray=result.get(name); //如果有存过数据,就直接向指定位置添加
}else{
dataArray=new double[7];
}//下面的是根据年份最后一位的数字大小向数组指定位置存储数据
dataArray[year.charAt(year.length()-1)-49]=Double.parseDouble(data);
result.put(name, dataArray);
}
结果:
{"东城区":[0,0,0,0,0,140.5,0],"亦庄经济开发区":[0,0,0,0,0,0,166.75],"密云区":[0,0,0,0,0,167.94,0],"延庆":[0,0,0,0,0,0,162.63],"怀柔区":[0,0,0,0,0,0,163.21],"房山区":[0,0,0,0,0,169.45,0],"昌平区":[0,0,0,0,0,161.91,0],"石景山区":[0,0,0,0,0,0,166.43],"通州区":[161,166,0,159.5,180,0,164.08],"门头沟区":[0,0,0,0,0,0,167.53],"顺义区":[0,0,0,0,0,0,164.37],"首都职工体质促进中心":[0,0,0,0,0,0,166.58]}
如果不要13年的数据位置,那就用switch语句为容量为6的double数组添加数据