橙稚 2017-06-12 06:55 采纳率: 33.3%
浏览 1441
已采纳

三个字段,一一对应,长度不够如何补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]

  • 写回答

2条回答 默认 最新

  • warmcore 2017-06-12 09:45
    关注
    • * 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]}
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误