java to do_java-将连字号分隔的字词(例如“ do-some-stuff”)转换为小写的驼峰形式(例如“ doSomeStuff”)的最优雅方法是什么?...
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”)的最优雅方法是什么?...相关推荐
- Java处理CSV或者制表符等分隔文件,比如Maf文件
Java处理CSV或者制表符等分隔文件,比如Maf文件 引入POM的依赖maven <dependency><groupId>com.univocity</groupId ...
- Java 实例 - 字符串分割和字符串分隔
Java 实例 - 字符串分割和字符串分隔 Java 实例 - 字符串分隔(StringTokenizer) Java 中我们可以使用 StringTokennizer 设置不同分隔符来分隔字符串,默 ...
- gdal java shp_【GDAL/OGR】利用GDAL/OGR读取shp文件并转换为json文件(Java版)
前言: 对于GIS开发者来说,GDAL/OGR是最熟悉不过的开源GIS库了,GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间 ...
- java 大小写转换函数_不使用Java中的任何库函数将大写转换为小写
java 大小写转换函数 Given a string and we have to convert it from uppercase to lowercase. 给定一个字符串,我们必须将其从大写 ...
- JAVA程序把大写转换小写_Java程序将字符串转换为小写和大写。
示例 import java.lang.*; public class StringDemo { public static void main(String[] args) { //将所有大写字母转 ...
- 用Java实现定义一个大写字母,把它转换为小写字母后显示出来
/** *项目:Java实现定义一个大写字母,把它转换为小写字母后显示出来 * 时间:2019.8.7 * 作者:郑翰林 */ //方法一 import java.util.Scanner; ...
- java中double身高_用JAVA编一个程序 输入10名同学的身高,找出最高升高,要求使用对象数组类型的带参方法来实现...
用JAVA编一个程序 输入10名同学的身高,找出最高升高,要求使用对象数组类型的带参方法来实现 关注:285 答案:5 mip版 解决时间 2021-02-05 07:44 提问者女人不需要倾国倾 ...
- java中把一个字符串中大写字母转换为小写,小写字母转换为大写
java中把一个字符串中大写字母转换为小写,小写字母转换为大写 观看提示: 这里提供2中思维,但是第一种是正确的,第二种是错误的:第二种的思维可以了解了解,但是需要注意的是如果某个字符串定义为Stri ...
- Java二维数组,将古诗《相思》分别用横版和竖版的形式输出
Java二维数组,将古诗<相思>分别用横版和竖版的形式输出 ---横版--- ---竖版--- 红豆生南国, ...
最新文章
- bst java_BST(二叉搜索树) Java 实现解析
- mysql同步大师_数据库大师成长日记:您最需要了解的NoSQL非关系型数据库
- map的专项知识点总结
- Oracle入门(五D)之如何设置show parameter显示隐含参数
- python 线程, GIL 和 ctypes
- 力扣 双周赛补题 2086. 从房屋收集雨水需要的最少水桶数
- python中io中的+模式_Python的高级特性,模块和IO操作
- 小红书下拉词是什么?小红薯下拉框怎么做?下拉词框如何应用?
- 一些用xib加载主界面的过程
- BGP华为、思科选路规则
- java号码池_Java常量池详解
- 微信小程序设计稿pt怎么转rpx
- 网站安全漏洞--大全
- Adapterdemo
- Ti 官方文档阅读笔记
- Centos7 分离部署lnmp+discuz+wordpress 及Redis
- 转基于HTTP Live Streaming(HLS) 搭建在线点播系统
- erp系统是什么意思啊
- 关于鼠标连续点击脚本的分享
- 【数学建模】2000全国大学生数学建模D题求解
热门文章
- oracle ola_Ola HallengrenSQL Server维护解决方案–数据库完整性检查
- 基于visual Studio2013解决面试题之0507字符串转整数
- C#刀那儿特更清晰讲述什么是事件?
- background:url(./images.png) no-repeat 0 center的用法
- PHP5.5+Nginx1.9
- mysql一个表中多个字段对应另一个表的id如何查询?
- [Xpand] Error	1	Invalid option '6' for /langversion; must be ISO-1, ISO-2, 3, 4, 5 or Default
- 15款值得开发者一试的最新的前端框架
- 防止跨站请求伪造(CSRF)攻击 和 防重复提交 的方法的实现
- MYSQL定时创建表分区