java-将连字号分隔的字词(例如“ do-some-stuff”)转换为小写的驼峰形式(例如“ doSomeStuff”)的最优雅方法是什么?

在Java中将连字号分隔的字词(例如“ do-some-stuff”)转换为小写驼峰形式(例如“ doSomeStuff”)的最优雅的方法是什么?

Christopher Klewes asked 2020-06-24T21:16:00Z

10个解决方案

86 votes

使用番石榴的CaseFormat:

import static com.google.common.base.CaseFormat.*;

String result = LOWER_HYPHEN.to(LOWER_CAMEL, "do-some-stuff");

Joachim Sauer answered 2020-06-24T21:16:08Z

14 votes

有了Java 8,终于有了一线希望:

Arrays.stream(name.split("\\-"))

.map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1).toLowerCase())

.collect(Collectors.joining());

虽然需要将3条实际的线分开才能清晰地辨认ツ

(注意:"\\-"适用于每个问题的烤肉串案例,蛇形案例只需更改为"_")

earcam answered 2020-06-24T21:16:36Z

9 votes

以下方法应在O(n)中非常有效地处理任务。 我们只是遍历xml方法名称的字符,跳过任何“-”并在需要时大写字符。

public static String toJavaMethodName(String xmlmethodName) {

StringBuilder nameBuilder = new StringBuilder(xmlmethodName.length());

boolean capitalizeNextChar = false;

for (char c:xmlMethodName.toCharArray()) {

if (c == '-') {

capitalizeNextChar = true;

continue;

}

if (capitalizeNextChar) {

nameBuilder.append(Character.toUpperCase(c));

} else {

nameBuilder.append(c);

}

capitalizeNextChar = false;

}

return nameBuilder.toString();

}

Andreas_D answered 2020-06-24T21:16:57Z

8 votes

为什么不试试这个:

分割为“-”

每个单词大写,跳过第一个

加入

编辑:经过深思熟虑...在尝试实现这一点时,我发现没有简单的方法可以在Java中加入字符串列表。 除非您使用来自Apache的StringUtil。 因此,无论如何,您都需要创建StringBuilder,因此该算法会变得有些难看:(

代码:这是上述方法的示例。 可以使用Java编译器的人(抱歉,没有一个方便的工具)对此进行测试吗? 并与此处找到的其他版本进行基准测试?

public static String toJavaMethodNameWithSplits(String xmlMethodName)

{

String[] words = xmlMethodName.split("-"); // split on "-"

StringBuilder nameBuilder = new StringBuilder(xmlMethodName.length());

nameBuilder.append(words[0]);

for (int i = 1; i < words.length; i++) // skip first

{

nameBuilder.append(words[i].substring(0, 1).toUpperCase());

nameBuilder.append(words[i].substring(1));

}

return nameBuilder.toString(); // join

}

Daren Thomas answered 2020-06-24T21:17:39Z

6 votes

如果您不希望依赖于库,则可以使用正则表达式和String.format的组合。使用正则表达式来提取-之后的起始字符。将它们用作String.format的输入。有点棘手,但无需使用( explicit)循环;)。

public class Test {

public static void main(String[] args) {

System.out.println(convert("do-some-stuff"));

}

private static String convert(String input) {

return String.format(input.replaceAll("\\-(.)", "%S"), input.replaceAll("[^-]*-(.)[^-]*", "$1-").split("-"));

}

}

Arne Deutsch answered 2020-06-24T21:17:59Z

4 votes

这是Andreas回答的一个细微变化,其作用超出了OP的要求:

public static String toJavaMethodName(final String nonJavaMethodName){

final StringBuilder nameBuilder = new StringBuilder();

boolean capitalizeNextChar = false;

boolean first = true;

for(int i = 0; i < nonJavaMethodName.length(); i++){

final char c = nonJavaMethodName.charAt(i);

if(!Character.isLetterOrDigit(c)){

if(!first){

capitalizeNextChar = true;

}

} else{

nameBuilder.append(capitalizeNextChar

? Character.toUpperCase(c)

: Character.toLowerCase(c));

capitalizeNextChar = false;

first = false;

}

}

return nameBuilder.toString();

}

它处理一些特殊情况:

some.other$funky:chars?转换为someOtherFunkyChars

some.other$funky:chars? is converted to someOtherFunkyChars

some.other$funky:chars? is converted to someOtherFunkyChars

Sean Patrick Floyd answered 2020-06-24T21:20:28Z

2 votes

获取StringUtils的Apache公用jar。 然后可以使用大写方法

import org.apache.commons.lang.StringUtils;

public class MyClass{

public String myMethod(String str) {

StringBuffer buff = new StringBuffer();

String[] tokens = str.split("-");

for (String i : tokens) {

buff.append(StringUtils.capitalize(i));

}

return buff.toString();

}

}

Sean answered 2020-06-24T21:20:48Z

2 votes

由于我不喜欢只为一种方法添加库,因此我实现了自己的解决方案(从骆驼箱到蛇箱):

public String toSnakeCase(String name) {

StringBuilder buffer = new StringBuilder();

for(int i = 0; i < name.length(); i++) {

if(Character.isUpperCase(name.charAt(i))) {

if(i > 0) {

buffer.append('_');

}

buffer.append(Character.toLowerCase(name.charAt(i)));

} else {

buffer.append(name.charAt(i));

}

}

return buffer.toString();

}

需要根据输入/输出情况进行调整。

Pierre Lemée answered 2020-06-24T21:21:13Z

2 votes

对于那些在项目中具有com.fasterxml.jackson库并且不想添加番石榴的人,可以使用jaskson namingStrategy方法:

new PropertyNamingStrategy.SnakeCaseStrategy.translate(String);

Chi Dov answered 2020-06-24T21:21:33Z

0 votes

遍历字符串。 找到连字符后,请将其删除,并大写下一个字母。

Noel M answered 2020-06-24T21:21:52Z

java to do_java-将连字号分隔的字词(例如“ do-some-stuff”)转换为小写的驼峰形式(例如“ doSomeStuff”)的最优雅方法是什么?...相关推荐

  1. Java处理CSV或者制表符等分隔文件,比如Maf文件

    Java处理CSV或者制表符等分隔文件,比如Maf文件 引入POM的依赖maven <dependency><groupId>com.univocity</groupId ...

  2. Java 实例 - 字符串分割和字符串分隔

    Java 实例 - 字符串分割和字符串分隔 Java 实例 - 字符串分隔(StringTokenizer) Java 中我们可以使用 StringTokennizer 设置不同分隔符来分隔字符串,默 ...

  3. gdal java shp_【GDAL/OGR】利用GDAL/OGR读取shp文件并转换为json文件(Java版)

    前言: 对于GIS开发者来说,GDAL/OGR是最熟悉不过的开源GIS库了,GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间 ...

  4. java 大小写转换函数_不使用Java中的任何库函数将大写转换为小写

    java 大小写转换函数 Given a string and we have to convert it from uppercase to lowercase. 给定一个字符串,我们必须将其从大写 ...

  5. JAVA程序把大写转换小写_Java程序将字符串转换为小写和大写。

    示例 import java.lang.*; public class StringDemo { public static void main(String[] args) { //将所有大写字母转 ...

  6. 用Java实现定义一个大写字母,把它转换为小写字母后显示出来

    /**  *项目:Java实现定义一个大写字母,把它转换为小写字母后显示出来  * 时间:2019.8.7  * 作者:郑翰林  */ //方法一 import java.util.Scanner; ...

  7. java中double身高_用JAVA编一个程序 输入10名同学的身高,找出最高升高,要求使用对象数组类型的带参方法来实现...

    用JAVA编一个程序 输入10名同学的身高,找出最高升高,要求使用对象数组类型的带参方法来实现 关注:285  答案:5  mip版 解决时间 2021-02-05 07:44 提问者女人不需要倾国倾 ...

  8. java中把一个字符串中大写字母转换为小写,小写字母转换为大写

    java中把一个字符串中大写字母转换为小写,小写字母转换为大写 观看提示: 这里提供2中思维,但是第一种是正确的,第二种是错误的:第二种的思维可以了解了解,但是需要注意的是如果某个字符串定义为Stri ...

  9. Java二维数组,将古诗《相思》分别用横版和竖版的形式输出

    Java二维数组,将古诗<相思>分别用横版和竖版的形式输出 ---横版---                                ---竖版--- 红豆生南国,         ...

最新文章

  1. bst java_BST(二叉搜索树) Java 实现解析
  2. mysql同步大师_数据库大师成长日记:您最需要了解的NoSQL非关系型数据库
  3. map的专项知识点总结
  4. Oracle入门(五D)之如何设置show parameter显示隐含参数
  5. python 线程, GIL 和 ctypes
  6. 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数
  7. python中io中的+模式_Python的高级特性,模块和IO操作
  8. 小红书下拉词是什么?小红薯下拉框怎么做?下拉词框如何应用?
  9. 一些用xib加载主界面的过程
  10. BGP华为、思科选路规则
  11. java号码池_Java常量池详解
  12. 微信小程序设计稿pt怎么转rpx
  13. 网站安全漏洞--大全
  14. Adapterdemo
  15. Ti 官方文档阅读笔记
  16. Centos7 分离部署lnmp+discuz+wordpress 及Redis
  17. 转基于HTTP Live Streaming(HLS) 搭建在线点播系统
  18. erp系统是什么意思啊
  19. 关于鼠标连续点击脚本的分享
  20. 【数学建模】2000全国大学生数学建模D题求解

热门文章

  1. oracle ola_Ola HallengrenSQL Server维护解决方案–数据库完整性检查
  2. 基于visual Studio2013解决面试题之0507字符串转整数
  3. C#刀那儿特更清晰讲述什么是事件?
  4. background:url(./images.png) no-repeat 0 center的用法
  5. PHP5.5+Nginx1.9
  6. mysql一个表中多个字段对应另一个表的id如何查询?
  7. [Xpand] Error 1 Invalid option '6' for /langversion; must be ISO-1, ISO-2, 3, 4, 5 or Default
  8. 15款值得开发者一试的最新的前端框架
  9. 防止跨站请求伪造(CSRF)攻击 和 防重复提交 的方法的实现
  10. MYSQL定时创建表分区