技术:字符串首字母由大写改小写简单方法以及一些思考归纳

简介: 字符串首字母由大写改小写。首先,这得是一个字符串,其次,他得有能力被改写为小写字母。当然这之前的一些判定需要自行处理。String的中文含义是:一串;线;细绳;带子;一系列;一连串;一批;字符串;弦等。

字符串首字母由大写改小写


首先,这得是一个字符串,其次,他得有能力被改写为小写字母。当然这之前的一些判定需要自行处理。


应用场景

  • Spring在代码中获取bean时使用类名称的类名首字母小写格式
  • 我们自定义Bean时,获取Bean的方式
  • 汉字转为拼音时,首字母需要大写


String的中文含义是:一串;线;细绳;带子;一系列;一连串;一批;字符串;弦等。我搜罗了下,发现了以下几种工具方案:


方案工具

1、自己编写一个工具类

暂且,我们把自己编写的工具类叫做StringUtils

当我们站在巨人的肩膀上时,发现一切都是理所当然,一切都是随意而且简单。当我们自己去梳理思路时,却还是一步一个脚印的造轮子。

publicstaticStringtoLowerCaseFirstOne(Stringstr) {
if (Character.isLowerCase(str.charAt(0))) {
returnstr;
    } else {
return (newStringBuilder()).append(Character.toLowerCase(str.charAt(0))).append(str.substring(1)).toString();
    }
}


这的确是一个锻炼人的方案,可以给予程序员一个思考的空间。我Baidu了一下,这种代码编写方案在自定义工具类StringUtils的比较多,相对应的还有首字母改为大写


初学者可能还会截取第一个字符,然后转为小写,再拼接起来成为一个完整的字符串,这也不失为一种解决方案,我们也姑且放在SrtringUtils工具类里面。

publicstaticStringtoLowerCaseFirstOne(Stringword) {
if (StringUtils.isEmpty(word)) {
returnnull;
    } else {
returnword.substring(0, 1).toUpperCase() +word.substring(1);
    }
}


2、使用Hutool工具类

Hutool工具类的StrUtil

Hutool这个是一个很好的工具,在项目中也很常使用,因为这些都是一些大佬给予我们的财富,给予我们的一些已经创造好的财富,我们只需要取就可以了。

publicstaticStringlowerFirst(CharSequencestr) {
if (null==str) {
returnnull;
   }
if (str.length() >0) {
charfirstChar=str.charAt(0);
if (Character.isUpperCase(firstChar)) {
returnCharacter.toLowerCase(firstChar) +subSuf(str, 1);
      }
   }
returnstr.toString();
}


3、使用Commons Lang

Commons Lang下commons-lang下的WordUtils

国外比较常用,国内一般般。但是一些工具还是会使用。

publicstaticStringuncapitalize(Stringstr) {
returnuncapitalize(str, null);
}
publicstaticStringuncapitalize(Stringstr, char[] delimiters) {
intdelimLen= (delimiters==null?-1 : delimiters.length);
if (str==null||str.length() ==0||delimLen==0) {
returnstr;
    }
intstrLen=str.length();
StringBufferbuffer=newStringBuffer(strLen);
booleanuncapitalizeNext=true;
for (inti=0; i<strLen; i++) {
charch=str.charAt(i);
if (isDelimiter(ch, delimiters)) {
buffer.append(ch);
uncapitalizeNext=true;
        } elseif (uncapitalizeNext) {
buffer.append(Character.toLowerCase(ch));
uncapitalizeNext=false;
        } else {
buffer.append(ch);
        }
    }
returnbuffer.toString();
}


4、使用Apache Commons Lang

Apache Commons Lang下commons-text下的WordUtils

可以说是一个老牌子的工具类。

publicstaticStringuncapitalize(finalStringstr) {
returnuncapitalize(str, null);
}
publicstaticStringuncapitalize(finalStringstr, finalchar... delimiters) {
if (StringUtils.isEmpty(str)) {
returnstr;
    }
finalSet<Integer>delimiterSet=generateDelimiterSet(delimiters);
finalintstrLen=str.length();
finalint[] newCodePoints=newint[strLen];
intoutOffset=0;
booleanuncapitalizeNext=true;
for (intindex=0; index<strLen;) {
finalintcodePoint=str.codePointAt(index);
if (delimiterSet.contains(codePoint)) {
uncapitalizeNext=true;
newCodePoints[outOffset++] =codePoint;
index+=Character.charCount(codePoint);
        } elseif (uncapitalizeNext) {
finalinttitleCaseCodePoint=Character.toLowerCase(codePoint);
newCodePoints[outOffset++] =titleCaseCodePoint;
index+=Character.charCount(titleCaseCodePoint);
uncapitalizeNext=false;
        } else {
newCodePoints[outOffset++] =codePoint;
index+=Character.charCount(codePoint);
        }
    }
returnnewString(newCodePoints, 0, outOffset);
}


可以参考官方提供的文档:[commons-text]


5、使用Apache Commons Lang

Apache Commons Lang下commons-lang3下的WordUtils

这是老牌子的一个升级款,建议使用这个。

publicstaticStringuncapitalize(finalStringstr) {
returnuncapitalize(str, null);
}
publicstaticStringuncapitalize(finalStringstr, finalchar... delimiters) {
finalintdelimLen=delimiters==null?-1 : delimiters.length;
if (StringUtils.isEmpty(str) ||delimLen==0) {
returnstr;
    }
finalchar[] buffer=str.toCharArray();
booleanuncapitalizeNext=true;
for (inti=0; i<buffer.length; i++) {
finalcharch=buffer[i];
if (isDelimiter(ch, delimiters)) {
uncapitalizeNext=true;
        } elseif (uncapitalizeNext) {
buffer[i] =Character.toLowerCase(ch);
uncapitalizeNext=false;
        }
    }
returnnewString(buffer);
}


备注:当前commons-lang3下的WordUtils的类已经不再支持使用,建议使用第4种方案commons-text下的WordUtils 。


关于方法的思考

我打算做一个简单的实验设计下哪一种方案在执行过程中处理时间比较少。找三组数据:

  • WordUtils
  • WordUtilsWordUtilsWordUtilsWordUtils
  • WordUtilsWordUtilsWordUtilsWordUtilsWordUtilsWordUtilsWordUtilsWordUtils


分别使用上述方案执行,然后记录下Main方法执行的时间。经过自己机器处理分别得出下面的几组实验数据(执行时间,单位毫秒):

image.png

上面得到的数据差别不是很大,至于选择哪一种方案,自己甄别下。


执行实验设计的Main方法:

publicstaticvoidmain(String[] args) {
longstartTime=System.currentTimeMillis();
System.out.println(StringUtil.toLowerCaseFirstOne("WordUtils"));
longendTime=System.currentTimeMillis();
System.out.println(String.format("开始时间:%s 结束时间:%s 相差时间:%s", startTime, endTime, endTime-startTime));
}
相关文章
|
存储 缓存 算法
JVM第三讲:深入理解java虚拟机之垃圾回收算法?CMS垃圾回收的基本流程?对象引用类型?
JVM第三讲:深入理解java虚拟机之垃圾回收算法?CMS垃圾回收的基本流程?对象引用类型?
447 0
|
9月前
|
人工智能 物联网 C语言
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
SVDQuant是由MIT研究团队推出的扩散模型后训练量化技术,通过将模型的权重和激活值量化至4位,显著减少了内存占用并加速了推理过程。该技术引入了高精度的低秩分支来吸收量化过程中的异常值,支持多种架构,并能无缝集成低秩适配器(LoRAs),为资源受限设备上的大型扩散模型部署提供了有效的解决方案。
531 5
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
|
10月前
|
人工智能 搜索推荐 算法
技术与人性:在数字时代探索人文关怀####
身处技术日新月异的今天,我们享受着科技带来的便捷,却也面临着前所未有的挑战——如何在冰冷的代码与算法中融入温暖的人性?本文旨在探讨技术背后的人文价值,通过剖析当前技术发展趋势,揭示技术进步对个体和社会的双重影响,并提出构建以人为本的技术发展观。不涉及具体技术细节,而是从更宏观的视角审视技术与人性的关系,强调在追求技术创新的同时,不应忽视对人类情感、伦理及社会责任的考量。 ####
|
关系型数据库 MySQL 应用服务中间件
LNMP详解(四)——LNMP原理与简单部署
LNMP详解(四)——LNMP原理与简单部署
384 2
|
开发框架 .NET 数据库连接
ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
232 0
|
存储 固态存储 芯片
计算机组成原理(1)----存储器相关(2)
计算机组成原理(1)----存储器相关
767 1
|
Java
【工具类】java数字金额转换成大写
【工具类】java数字金额转换成大写
834 0
|
监控 关系型数据库 MySQL
centos7 zabbix-service 源码编译 安装部署服务端 和 常见安装错误
centos7 zabbix-service 源码编译 安装部署服务端 和 常见安装错误
219 0
|
存储 前端开发 Go
flutter+go构建的即时通讯app,ChatCraft
社交应用程序在世界各地都很流行,例如 Facebook、Line、Whatsapp。如果您渴望打造一款独具个性的社交平台,Chat-Craft项目将是您不可或缺的理想之选。Chat-Craft是一款跨平台移动应用,采用了Golang作为后端服务端技术,以及Flutter作为前端客户端技术。该应用旨在提供高效、稳定且跨平台的用户体验,将现代的移动应用开发技术和高性能的后端服务端技术相结合。在Chat-Craft项目中,作者精心雕琢了客户端UI,灵感汲取于各大即时通讯应用及最新的应用设计规范。
|
缓存 Java 数据库连接
微服务框架(六)Spring Boot集成Mybatis及Druid
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Spring Boot集成Mybatis,包括mybatis-generator的使用

热门文章

最新文章