前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java:蛇形命名法格式(snake-case)字符串变量名转驼峰命名法格式(camel-case)

java:蛇形命名法格式(snake-case)字符串变量名转驼峰命名法格式(camel-case)

作者头像
10km
发布2022-09-26 16:13:04
1.2K0
发布2022-09-26 16:13:04
举报
文章被收录于专栏:10km的专栏10km的专栏

在变量命名的习惯方法有多种,不同的语言变量都有约定俗成的命名方式,比如常见就是蛇峰命名法(camel-case)和蛇形命名法(snake-case),比如Java中的命名习惯就是用camel-case,而SQL语言和C语言这些历史更久的设计语言命名习惯是snake-case.

在开发工作,比如涉及反射,数据库字段名转换为Java字段名,我们有时需要将这两种不同命名格式的变量名进行相互转换,做这个转换自己也不复杂,因为经常要用到而且要可靠,所以在网上找了找,找到如下这篇文章,比较全面的介绍了camel-case和snake-case之间转换的各种实现方案

《Convert a String to Camel Case》

看了文章才知道,其实一些著名的第三方库都提供了命名格式的转换工具,比如 Apache 的Commons Text和google的guava, 所以我就挑了我熟悉的guava,基于它进一步封装了自己的命名格式转换类:CaseSupport。 实现如下:

代码语言:javascript
复制
import static com.google.common.base.Strings.nullToEmpty;

import com.google.common.base.CaseFormat;

public class CaseSupport {

	/**
	 * @param name
	 * @return 将变量名转为蛇形命名法格式的字符串
	 */
	public static String toSnakecase(String name){
		return null == name ? name : CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE,name);
	}

	/**
	 * @param name
	 * @return 将变量名转为驼峰命名法格式的字符串
	 */
	public static String toCamelcase(String name){
		return null == name ? name : CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name);
	}

	/**
	 * 判断 变量是否为驼峰命名法格式的字符串
	 * @param name
	 */
	public static boolean isCamelcase(String input){
		if(!nullToEmpty(input).trim().isEmpty()){
			return !input.equals(input.toLowerCase()) 
					&& !input.equals(input.toUpperCase()) && input.indexOf('_')<0; 
		}
		return false;
	}
	/**
	 * 判断 变量是否为驼峰命名法格式的字符串
	 * @param input
	 */
	public static boolean isSnakelcase(String input){
		if(!nullToEmpty(input).trim().isEmpty()){
			return input.indexOf('_')>=0;
		}
		return false ;
	}

}

以上完整代码参见:https://gitee.com/l0km/common-java/blob/master/common-base2/src/main/java/net/gdface/utils/CaseSupport.java

调用示例如下:

代码语言:javascript
复制
import static org.junit.Assert.*;

import org.junit.Test;

import static net.gdface.utils.SimpleLog.log;
import static com.google.common.base.Strings.nullToEmpty;

import static net.gdface.utils.CaseSupport.*;

public class CaseSupportTest {
	@Test
	public void testCase(){
		
		
		log(toCamelcase("otherProps"));
		log(toSnakecase("OtherPropsP"));
		log(toSnakecase("A1A2"));
		log(toSnakecase("Other Props"));
		log(toSnakecase("otherProps"));
		log(toCamelcase("OTHERPROPS"));
		log(toCamelcase("uer_1"));
		log(toCamelcase("_uer_sam_"));
		log(toCamelcase("_uer_Sam_1"));
		log(toCamelcase("_uer"));
		log(toCamelcase("_uer_S"));
		log(toCamelcase("PerSS"));
		assertTrue(CaseSupport.isCamelcase("otherProps"));
		assertFalse(CaseSupport.isCamelcase("   "));
		assertTrue(CaseSupport.isCamelcase("  otherProps "));
		assertTrue(CaseSupport.isCamelcase("  PtherPropsP "));
		assertFalse(CaseSupport.isSnakelcase("  PtherPropsP "));
		assertFalse(CaseSupport.isSnakelcase("OTHERPROPS"));
		assertTrue(CaseSupport.isSnakelcase("_uer_sam_"));
		assertTrue(CaseSupport.isSnakelcase("_uer"));
	}
}

以上完整代码参见 https://gitee.com/l0km/common-java/blob/master/common-base2/src/test/java/net/gdface/utils/CaseSupportTest.java

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档