三个字段,一一对应,长度不够如何补0,或者null?求代码

图片说明
这是数据查询的数据。
[{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]

  • * 1. 1. 图片说明
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数组添加数据