什么是一个转换的最佳方式"PascelCase"串,像下划线分隔全部大写"Pascel_CASE"。我写了这个有效的代码:
private static String pascelCaseToUpperCaseSeparatedByUnderscore(String s) {
String[] values = s.split("(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])");
for (int i = 0, len = values.length; i < len; i++) {
values[i] = values[i].toUpperCase();
}
return String.join("_", values);
}
Run Code Online (Sandbox Code Playgroud)
但是,有没有更好的方法说,使用库来做到这一点?
乍一看,您的正则表达式看起来很复杂,这可能会让其他阅读您的代码且不熟悉正则表达式的人望而却步。你可以用这个更紧凑和可读的替换它:
"(?=\\p{Upper})"
Run Code Online (Sandbox Code Playgroud)
与流有关,这个单行代码读起来几乎像纯文本
private static String camelCaseToUpperCaseSeparatedByUnderscore(String s) {
return Pattern.compile("(?=\\p{Upper})")
.splitAsStream(s)
.map(String::toUpperCase)
.collect(Collectors.joining("_"));
}
Run Code Online (Sandbox Code Playgroud)
如果你可以使用番石榴,你可以这样做:
String camelCase = "CamelCase";
String underscore = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, camelCase);
System.out.println(underscore);
Run Code Online (Sandbox Code Playgroud)
如果你只想使用正则表达式,你可以这样做:
String underscore = String.join("_", Arrays.asList(camelCase.split("(?=[A-Z])")).stream()
.map(String::toUpperCase).collect(Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)
您也可以使用Arrays.stream():
String underscore = Arrays.stream(camelCase.split("(?=[A-Z])")).map(String::toUpperCase)
.collect(Collectors.joining("_"));
Run Code Online (Sandbox Code Playgroud)
输出
CAMEL_CASE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
351 次 |
| 最近记录: |