属性名称转换-驼峰命名&下划线

@Test
public void camelcaseTest() {
    String util = ConvertUtil.camelCaseToUnderscore("paramCheckUtil");
    String str = ConvertUtil.underscoreToCamelCase("param_check_util");
    System.out.println(util + ", " + str);
}
public class ConvertUtil {

    private static Pattern camelPattern = Pattern.compile("[A-Z]");
    private static Pattern underscorePattern = Pattern.compile("_(\\w)");

    /**
     * 驼峰命名转下划线
     * group(0) 表示匹配的全部字符串,即使正则中没有显示的括号,group(0) 也总是存在的,它相当于整个模式匹配的结果
     * group(1) 表示第一个捕获组
     */
    public static String camelCaseToUnderscore(String name) {
        StringBuffer buffer = new StringBuffer();

        Matcher matcher = camelPattern.matcher(name);
        while (matcher.find()) {
            String str = matcher.group(0).toLowerCase();
            matcher.appendReplacement(buffer, "_" + str);
        }
        matcher.appendTail(buffer);

        return buffer.toString();
    }

    /**
     * 下划线转驼峰
     */
    public static String underscoreToCamelCase(String name) {
        StringBuffer buffer = new StringBuffer();

        Matcher matcher = underscorePattern.matcher(name);
        while (matcher.find()) {
            // int groupCount = matcher.groupCount();
            matcher.appendReplacement(buffer, matcher.group(1).toUpperCase());
        }
        matcher.appendTail(buffer);

        return buffer.toString();
    }

    /**
     * 对象转Map
     */
    public static Map<String, Object> objectToMap(Object object) {
        Map<String, Object> map = new HashMap<>();

        Field[] declaredFields = object.getClass().getDeclaredFields();
        for (Field field : declaredFields) {
            field.setAccessible(true);

            try {
                Object obj = field.get(object);
                if (Objects.nonNull(obj)) {
                    map.put(field.getName(), obj);
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }

        return map;
    }

    /**
     * 对象属性合并
     */
    public static <T> void merge(T source, T target) {
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(target.getClass());
            for (PropertyDescriptor descriptor : beanInfo.getPropertyDescriptors()) {
                // 属性是否有对应的 Setter 方法
                if (descriptor.getWriteMethod() == null) {
                    continue;
                }

                Object value = descriptor.getReadMethod().invoke(source);
                if (value != null) {
                    descriptor.getWriteMethod().invoke(target, value);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容