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

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

作者头像
10km
发布于 2022-09-26 08:13:04
发布于 2022-09-26 08:13:04
1.6K00
代码可运行
举报
文章被收录于专栏:10km的专栏10km的专栏
运行总次数:0
代码可运行

在变量命名的习惯方法有多种,不同的语言变量都有约定俗成的命名方式,比如常见就是蛇峰命名法(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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
linux shell:将蛇形命名法(snake-case)变量字符串转为驼峰命名法(camel-case)变量字符串
最近的工作有一个需求,需要利用linux shell脚本将_或-作连字符的变量名字符串转为驼峰命名法(camel-case)的字符串,其实吧,'_'做连字符的命名方式有专门的名字,蛇形命名法(snake-case).'-'做连字符的命名方式也有专门的名字,脊柱命名法(spinal-case),也有叫kebab-case(kebab-烤肉串,也挺形象的).关于这些命名方式的由来本文未尾的参考资料1 2 3都有详细说明,我也是这次为了解决这个问题查资料才知道这些名词,以前孤陋寡闻了。
10km
2021/12/01
1.6K0
linux shell:将蛇形命名法(snake-case)变量字符串转为驼峰命名法(camel-case)变量字符串
​Python 为什么要推荐蛇形命名法?为什么不用驼峰命名
关于变量的命名,这又是一个容易引发程序员论战的话题。如何命名才能更具有可读性、易写性与明义性呢?众说纷纭。
周陆军博客
2023/05/28
2.2K0
撸码的福音--变量名生成器的实现
最近换工作以后,结结实实的写了几个月的业务。需求完结以后,就找找自己喜欢的东西写写,换个口味。
用户2060079
2018/10/11
1.8K0
[oeasy]python059变量命名有什么规则_惯用法_蛇形命名法_name_convention_snake
local_soil_moisture_value_to_determine_the_amount_of_water_added = 0
oeasy
2025/01/13
850
[oeasy]python059变量命名有什么规则_惯用法_蛇形命名法_name_convention_snake
Java 对字符串操作的工具类,很全
目录 1 实现 1 实现 import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.util.AntPathMatcher; import com.ruoy
一写代码就开心
2023/02/01
1.1K0
Python中的元编程
就像元数据是关于数据的数据一样,元编程是编写程序来操作程序(Just like metadata is data about data, metaprogramming is writing programs that manipulate programs)。一个常见的看法是元编程是用来成成其他程序的程序,但是实际上它的含义更为广泛(It's a common perception that metaprograms are the programs that generate other programs. But the paradigm is even broader)。所有用于读取、分析、转换或修改自身的程序都是元编程的例子。比如:
py3study
2020/01/09
5820
杨校老师课堂之封装操作消息提醒工具类ResultCode【简直太好用】
以下工具类可以帮开发工程师在springmvc中进行快速完成封装消息、map链式的提醒,由对象转为json传递到前台,适用于Vue项目
杨校
2022/09/23
5750
史上最全的Java命名规范!告别编码5分钟,命名2小时?
每个公司都有不同的标准,目的是为了保持统一,减少沟通成本,提升团队研发效能。所以本文中是笔者结合阿里巴巴开发规范,以及工作中的见闻针对 Java 领域相关命名进行整理和总结,仅供参考。
用户7886150
2021/02/01
4K0
精心整理了100+Python字符串常用操作,收藏备用!
字符串作为平时使用最多的数据类型,其常用的操作我们还是很有必要熟记于心的,本文整理了多种字符串的操作的案例,还是非常用心,记得点赞收藏哦
周萝卜
2022/04/06
14.8K0
Android开发规范(转自掘金,转MD格式)
为了有利于项目维护、增强代 码可读性、提升 Code Review 效率以及规范团队安卓开发,故提出以下安卓开发规范,该规范结合本人多年的开发经验并吸取多家之精华,可谓是本人的呕心沥血之作,称其为当前最完善的安卓开发规范一点也不为过,如有更好建议,欢迎到 GitHub 提 issue,原文地址:Android 开发规范(完结版)。相关 Demo,可以查看我的 Android 开发工具类集合项目:Android 开发人员不得不收集的代码。后续可能会根据该规范出一个 CheckStyle 插件来检查是否规范,当然也支持在 CI 上运行。
奶油话梅糖
2025/03/03
1270
【开发规范系列】(四)前端开发规范
现代软件架构的复杂性需要协同开发完成,如何高效地协同呢?无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全,试想如果没有限速,没有红绿灯,谁还敢上路行驶。对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率,降低沟通成本。代码的字里行间流淌的是软件系统的血液,质量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升系统稳定性,码出质量。
程序员朱永胜
2023/09/01
8130
Camera系统 | HFR Usecase分析
高帧率录像即慢动作拍摄,通常人眼能够接受的最好的视频帧速率是24帧/每秒。如果用120帧/秒拍摄一个动作,再用24帧每秒来播放的话,视频就放慢了5倍。
Abalone
2023/03/14
2.6K0
Camera系统 | HFR Usecase分析
Java解读-ThreadLocal详解与应用
ThreadLocal 字面意思来看有点像“线程的本地实现版本”,实际上真正含义是ThreadLocalVariable(线程本地局部变量),所以把它命名为ThreadLocalVar更加合适。
高广超
2018/12/12
5950
spring整合各种RPC框架(netty、dubbo、dubbox、gRPC、Motan)-续(gRPC)
有将近10万字~,所以建议各位下载源码学习。(如需要请收藏!转载请声明来源,谢谢!)
逍遥壮士
2021/02/03
1.6K0
spring整合各种RPC框架(netty、dubbo、dubbox、gRPC、Motan)-续(gRPC)
SpringBoot
使用 Spring Boot 可以很容易地创建出能直接运行的独立的、生产级别的基于 Spring 的应用。我们对 Spring 平台和第三方类库有自己的考虑,因此您可以从最基本的开始。大多数 Spring Boot 应用只需要很少的 Spring 配置。您可以使用 Spring Boot 来创建一个可以使用 java -jar 命令来运行或者基于传统的 war 包部署的应用程序。
xiaozhangStu
2023/05/04
7240
哥斯拉Godzilla | 基于tomcat webshell的有效通杀混淆方式&通用的java代码混淆
赛博大作战中的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!
亿人安全
2024/01/23
8980
哥斯拉Godzilla | 基于tomcat webshell的有效通杀混淆方式&通用的java代码混淆
Spring Security的项目中集成JWT Token令牌安全访问后台API
最近接了一个私活项目,后台使用的是Spring Boot脚手架搭建的,认证和鉴权框架用的Spring Security。同时为了确保客户端安全访问后台服务的API,需要用户登录成功之后返回一个包含登录用户信息的jwt token, 用于调用其他接口时将此jwt token携带在请求头中作为调用者的认证信息。最近一个多月一方面在忙着做这个项目,另一方面恰好遇上了精彩的世界杯,也没怎么发文了。很多时候真的深感写篇原创文章比单纯的敲代码麻烦多了,但是好久不更文还是要检讨一下自己的惰性,客服自身的惰性是每个想要突破自我、不甘平庸的普通人的一辈子都不能松懈的重任。
用户3587585
2023/03/09
4.4K0
Spring Security的项目中集成JWT Token令牌安全访问后台API
前后端分离 , 如何保证接口安全性 ?
用户使用用户名密码登录后服务器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的形式存放在缓存服务器中。服务端接收到请求后进行Token验证,如果Token不存在,说明请求无效。
Jensen_97
2023/07/20
2.5K0
前后端分离 , 如何保证接口安全性 ?
Java 中的本地线程 ThreadLocal<T> 与同步机制的比较和最佳实践
ThreadLocal 解决线程安全持有对象访问的问题 . 通过 ThreadLocal.set() 方法将对象实例保存在每个线程自己所拥有的 ThreadLocalMap中,这样每个线程使用自己的对象实例,彼此不会影响达到隔离的作用,从而就解决了对象在被共享访问带来线程安全问题。
一个会写诗的程序员
2020/03/20
9000
Java 中的本地线程 ThreadLocal<T> 与同步机制的比较和最佳实践
Canal原理及其使用
  canal是用java开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,canal主要支持了MySQL的binlog解析,解析完成后才利用canal client 用来处理获得的相关数据。(数据库同步需要阿里的otter中间件,基于canal)
用户4283147
2022/10/27
1.5K0
Canal原理及其使用
推荐阅读
相关推荐
linux shell:将蛇形命名法(snake-case)变量字符串转为驼峰命名法(camel-case)变量字符串
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档