Preview
Skip to content
CodingDiary
返回

驼峰命名和下划线命名互相转化

编辑页面
导读

数据库字段是 user_name,Java 属性是 userName,来回转换烦不烦?这个工具类帮你搞定驼峰命名和下划线命名的互转。基于正则表达式实现,代码简洁高效,直接复制到项目里就能用。ORM 框架没覆盖的场景,手动转换必备。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * <p>
 * 驼峰命名和下划线命名互转
 * </p>
 *
 * @package: com.xkcoding
 * @description: 驼峰命名和下划线命名互转
 * @author: yangkai.shen
 * @date: Created in 2018/1/11 上午9:49
 * @copyright: Copyright (c) 2018
 * @version: 0.0.1
 * @modified: yangkai.shen
 */
public class CasesUtil {

	private static final Pattern CAMELCASE_PATTERN = Pattern.compile("[A-Z]");
	private static final Pattern UNDERLINE_PATTERN = Pattern.compile("_[a-z]");
	private static final char UNDERLINE = '_';

	/**
	 * 驼峰命名(形如:UserInfo)转化为下划线命名(user_info)
	 *
	 * @param camelCase 驼峰格式的字符串
	 * @return 下划线形式的字符串
	 */
	public static String camelCase2UnderlineCase(String camelCase) {
		Matcher matcher = CAMELCASE_PATTERN.matcher(camelCase);
		StringBuilder builder = new StringBuilder(camelCase);
		for (int i = 0; matcher.find(); i++) {
			builder.replace(matcher.start() + i, matcher.end() + i, UNDERLINE + matcher.group().toLowerCase());
		}
		if (builder.charAt(0) == UNDERLINE) {
			builder.deleteCharAt(0);
		}
		return builder.toString();
	}

	/**
	 * 下划线命名(user_info)转化为驼峰命名(形如:userInfo)
	 *
	 * @param underlineCase 下划线形式的字符串
	 * @return 驼峰格式的字符串
	 */
	public static String underlineCase2CamelCase(String underlineCase) {
		Matcher matcher = UNDERLINE_PATTERN.matcher(underlineCase);
		StringBuilder builder = new StringBuilder(underlineCase);
		for (int i = 0; matcher.find(); i++) {
			builder.replace(matcher.start() - i, matcher.end() - i, matcher.group().substring(1).toUpperCase());
		}
		if (Character.isUpperCase(builder.charAt(0))) {
			builder.replace(0, 1, String.valueOf(Character.toLowerCase(builder.charAt(0))));
		}
		return builder.toString();
	}
}

编辑页面
分享到:

上一篇
ElasticSearch 笔记
下一篇
DevOps 之 Jenkins 安装、配置、美化、插件及常见错误处理