目录
一、使用Guava库
Guava库中的CaseFormat类提供了转换不同命名风格的方法。
pom.xml文件中添加如下依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
</dependency>
1.1 从驼峰转换到下划线
import com.google.common.base.CaseFormat;
public class CaseConverter {
public static void main(String[] args) {
String camelCase = "camelCaseExample";
String snakeCase = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, camelCase);
System.out.println(snakeCase); // 输出: camel_case_example
}
}
2..2 从下划线转换到驼峰
import com.google.common.base.CaseFormat;
public class CaseConverter {
public static void main(String[] args) {
String snakeCase = "camel_case_example";
String camelCase = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, snakeCase);
System.out.println(camelCase); // 输出: camelCaseExample
}
}
二、使用Apache Commons Lang库
Apache Commons Lang库中的StringUtils类可以结合正则表达式使用来进行转换。
pom.xml文件中添加如下依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
2.1 从驼峰转换到下划线
import com.google.common.base.CaseFormat;
public class CaseConverter {
public static void main(String[] args) {
String camelCase = "camelCaseExample";
// 使用正则表达式进行替换操作
String snakeCase = camelCase.replaceAll("([A-Z])", "_$1").toLowerCase();
System.out.println(snakeCase); // 输出: camel_case_example
}
对正则表达式 "([A-Z])" 和替换操作 "_$1" 进行详细解析:
正则表达式 "([A-Z])":
( 和 ) 表示一个捕获组,用于匹配并捕获大写字母。
[A-Z] 是一个字符类,表示匹配任何大写字母 A 到 Z。
替换操作 "_$1":
_ 是字面量字符,表示下划线。
$1 是反向引用,引用的是正则表达式中第一个捕获组的内容,即所有匹配到的大写字母。
整个 replaceAll 方法的作用是:
查找所有大写字母,并在每个大写字母前插入一个下划线。
toLowerCase() 方法用于将转换后的字符串中的所有字符转换为小写,以符合下划线命名法的标准。
2.1 从下划线转换到驼峰
import org.apache.commons.lang3.StringUtils;
public class CaseConverter {
public static void main(String[] args) {
String snakeCase = "camel_case_example";
// 使用 StringUtils 的多个方法组合来转换字符串格式
String camelCase = StringUtils.uncapitalize( // 将字符串的第一个字符转为小写
StringUtils.join( // 将字符串数组连接成一个字符串,中间不添加任何分隔符
StringUtils.splitByCharacterTypeCamelCase( // 按照 Camel Case 风格拆分字符串,这里先将字符串转为大写形式
snakeCase.toUpperCase()), "")); // 空字符串作为连接符
System.out.println(camelCase); // 输出转换后的 camelCase 格式的字符串
}
}
splitByCharacterTypeCamelCase 方法:
这个方法会根据 Camel Case 风格(即大写字母前的分界)来分割字符串。但是,在此之前,我们将 snakeCase 字符串转换为了大写形式(toUpperCase()),这样原本的下划线就会消失,而每个单词的首字母都会变成大写,从而可以被这个方法正确地识别为 Camel Case 风格。
结果是一个字符串数组,其中每个元素都是原 snakeCase 字符串中由下划线分隔的单词的大写形式。
join 方法:
接下来使用 join 方法将上一步得到的字符串数组连接起来,由于传入的连接符是空字符串 "",所以这些单词会被直接连接在一起,没有额外的分隔符。
uncapitalize 方法:
最后调用 uncapitalize 方法将整个字符串的首字母转换为小写,这是因为 Camel Case 的定义是除了第一个单词外,其他单词的首字母大写,而第一个单词的首字母小写。
三、使用Hutool库
Hutool库中的StrUtil类提供了转换的方法。
pom.xml文件中添加如下依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.13</version>
</dependency>
3.1 从驼峰转换到下划线
import cn.hutool.core.lang.StrPool;
import cn.hutool.core.util.StrUtil;
public class CamelCaseConverter {
public static void main(String[] args) {
String camelCase = "thisIsACamelCaseString";
String snakeCase = StrUtil.camelToUnderline(camelCase);
System.out.println(snakeCase); // 输出: this_is_a_camel_case_string
}
}
3.1 从下划线转换到驼峰
import cn.hutool.core.lang.StrPool;
import cn.hutool.core.util.StrUtil;
public class SnakeCaseConverter {
public static void main(String[] args) {
String snakeCase = "this_is_a_snake_case_string";
String camelCase = StrUtil.underlineToCamel(snakeCase, false);
System.out.println(camelCase); // 输出: thisIsASnakeCaseString
}
}