ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java中equals()方法判断字符串相等时报NullPointerException,如s.equals("String")

2022-03-28 15:02:18  阅读:208  来源: 互联网

标签:searchParams Java String equals DIC new ID NullPointerException


1、题目

阅读getCondition方法,找出其中的错误点并修复

  • 要求不能使用第三方包,只能用JDK中的方法
  • 要求对修复之后的方法进行测试,并打印结果

2、代码片段

import java.sql.Timestamp;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
​
public class SQLConstructor {
    
    public static void main(String[] args) {
        System.out.println("阅读getCondition方法,找出其中的错误点并修复");
        System.out.println("要求不能使用第三方包,只能用JDK中的方法");
        System.out.println("要求对修复之后的方法进行测试,并打印结果");
    }
​
    /**
     * 构造查询SQL语句
     * @param searchParams
     * @param values
     * @return 返回SQL
     */
    private static String getCondition(Map<String, Object> searchParams, List<Object> values) {
​
        StringBuilder sb = new StringBuilder();
​
        for (String s : searchParams.keySet()) {
            if ("startTime".equals(s)) {
                if (String.valueOf(searchParams.get("startTime")).contains(":")) {
                    throw new RuntimeException("请使用时间进行查询!");
                } else {
                    sb.append("UPDATE_TIME >= ? AND ");
                    values.add(paseDateFromLongStr(searchParams.get(s).toString()));
                }
            } else if (s.equals("DIC_TYPE")) {
                sb.append(" DIC_TYPE IN (?,?,?) AND ");
                String[] split = String.valueOf(searchParams.get(s)).split(",");
                if (split.length == 3) {
                    values.addAll(Arrays.asList(split));
                } else if (split.length < 3) {
                    // TODO 处理非3的情况
                }
            } else if ("ITEM_ID".equals(s)) {
                sb.append("ITEM_ID =? AND ");
​
            } else if ("ORG_ID".equals(s) || "COMPANY_ID".equals(s)) {
                sb.append(s + " =? AND ");
                values.add(searchParams.get(s));
            }
​
        }
        if (!searchParams.keySet().contains("DIC_CODE")) {
            sb.append(" DIC_CODE IN ('JOB_DUTY','GROUP_JOB_DUTY','USER_POST') AND ");
        }
        return sb.toString();
​
    }
​
    public static Date paseDateFromLongStr(String dateStr) {
        Date date = null;
        try {
            Long timestamp = Long.parseLong(dateStr);
            date = new Timestamp(timestamp);
        } catch (Exception e) {
            throw new RuntimeException(
                    "请检查日期格式(需使用时间戳格式的时间)");
        }
        return date;
    }
}

3、代码解答

import java.sql.Timestamp;
import java.util.ArrayList; 
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap; 
import java.util.List;
import java.util.Map;

public class SQLConstructor {
    
    public static void main(String[] args) {
        System.out.println("阅读getCondition方法,找出其中的错误点并修复");
        System.out.println("要求不能使用第三方包,只能用JDK中的方法");
        System.out.println("要求对修复之后的方法进行测试,并打印结果");
        

        Map<String, Object> map1 = new HashMap<String, Object>();
        map1.put("startTime", "1648349346");  
        List<Object> list1=new ArrayList<Object>();
        String str1 =SQLConstructor.getCondition(map1, list1);
        System.out.println(str1);   //UPDATE_TIME >= ? AND  DIC_CODE IN ('JOB_DUTY','GROUP_JOB_DUTY','USER_POST') AND

        Map<String, Object> map2 = new HashMap<String, Object>();
        map1.put("startTime", "2022-03-27 10:49:06");  
        List<Object> list2=new ArrayList<Object>();
        String str2 =SQLConstructor.getCondition(map2, list2);
        System.out.println(str2);   // DIC_CODE IN ('JOB_DUTY','GROUP_JOB_DUTY','USER_POST') AND

        System.out.println("========================================");

        Map<String, Object> map3 = new HashMap<String, Object>();
        //方便测试全放到map3中
        map3.put("DIC_TYPE", "value2");
        map3.put("ITEM_ID", "value3");
        map3.put("ORG_ID", "value4");
        map3.put("COMPANY_ID", "value5");  
        List<Object> list3=new ArrayList<Object>();
        String str3 =SQLConstructor.getCondition(map3, list3);
        System.out.println(str3);   //  ORG_ID =? AND  DIC_TYPE IN (?,?,?) AND ITEM_ID =? AND COMPANY_ID =? AND  DIC_CODE IN ('JOB_DUTY','GROUP_JOB_DUTY','USER_POST') AND

        //map.put(null, "value");  //s.equals("DIC_TYPE" 报错  NullPointerException
    }

    /**
     * 构造查询SQL语句
     * @param searchParams
     * @param values
     * @return 返回SQL
     */
    private static String getCondition(Map<String, Object> searchParams, List<Object> values) {

        StringBuilder sb = new StringBuilder();

        for (String s : searchParams.keySet()) {
            if ("startTime".equals(s)) {
                if (String.valueOf(searchParams.get("startTime")).contains(":")) {
                    throw new RuntimeException("请使用时间进行查询!");
                } else {
                    sb.append("UPDATE_TIME >= ? AND ");
                    values.add(paseDateFromLongStr(searchParams.get(s).toString()));
                }
            // } else if (s.equals("DIC_TYPE")) {   修改前
            } else if ("DIC_TYPE".equals(s)) {
                sb.append(" DIC_TYPE IN (?,?,?) AND ");
                String[] split = String.valueOf(searchParams.get(s)).split(",");
                if (split.length == 3) {
                    values.addAll(Arrays.asList(split));
                } else if (split.length < 3) {
                    // TODO 处理非3的情况
                }
            } else if ("ITEM_ID".equals(s)) {
                sb.append("ITEM_ID =? AND ");

            } else if ("ORG_ID".equals(s) || "COMPANY_ID".equals(s)) {
                sb.append(s + " =? AND ");
                values.add(searchParams.get(s));
            }

        }
        if (!searchParams.keySet().contains("DIC_CODE")) {
            sb.append(" DIC_CODE IN ('JOB_DUTY','GROUP_JOB_DUTY','USER_POST') AND ");
        }
        return sb.toString();

    }

    public static Date paseDateFromLongStr(String dateStr) {
        //1648349346   2022-03-27 10:49:06
        Date date = null;
        try {
            Long timestamp = Long.parseLong(dateStr);
            date = new Timestamp(timestamp);
        } catch (Exception e) {
            throw new RuntimeException(
                    "请检查日期格式(需使用时间戳格式的时间)");
        }
        return date;
    }
}

由于个人能力有限,如有不足之处,欢迎指正。

标签:searchParams,Java,String,equals,DIC,new,ID,NullPointerException
来源: https://www.cnblogs.com/CodedogWorld/p/16067105.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有