我需要将下划线分隔的单词(如NAME_OF_THINGS)转换为更好的可读格式(如“事物的名称”),在少数情况下,我需要诸如“事物的名称”的名称。
我有下面的代码,我使用谷歌番石榴的CaseFormat类进行了转换。但这并没有给我确切的预期结果。有人可以建议我将其转换为更好的方法吗?
StringUtils.join(StringUtils.splitByCharacterTypeCamelCase(
CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, input)), " ")
输入:NAME_OF_THINGS
预期:事物名称
当前:事物的名称
PS:我还需要类似“事物名称”(Of to of)
答案 0 :(得分:3)
使用Java-8,您可以在一行中完成此操作:
String str = "NAME_OF_THINGS";
Arrays.stream(str.replaceAll("_", " ").toLowerCase().split(" "))
.map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1) + " ")
.forEach(System.out::print);
在这里,我们将所有出现的_
替换为" "
,然后将整个字符串转换为小写。接下来,我们基于" "
对其进行拆分,然后执行子字符串操作以实现结果。
这给出了输出:
事物名称
仅获取首字母大写使用:
String newString = Character.toUpperCase(str.charAt(0)) + str.substring(1)
.replaceAll("_", " ").toLowerCase();
这给出了:
事物名称
答案 1 :(得分:0)
或者这个
input.substring(0,1) + input.substring(1).replaceAll("_", " ").toLowerCase()
答案 2 :(得分:0)
使用Pattern
:
String result = Pattern.compile("_")
.splitAsStream(source)
.map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1).toLowerCase())
.collect(Collectors.joining(" "));
导致:
Name Of Things
答案 3 :(得分:0)
如果您确实不希望of
大写,则可以再添加一个map
函数来解决此问题:
Arrays.stream(str.toLowerCase().split("_"))
.map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1) + " ")
.map(e -> e.equalsIgnoreCase("Of ") ? "of " : e)
.forEach(System.out::println);
或者如果您希望结果为String
:
String result = Arrays.stream(str.toLowerCase().split("_"))
.map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1))
.map(e -> e.equalsIgnoreCase("Of") ? "of" : e)
.collect(Collectors.joining(" "));
输出:
Name of Things
然后,如果您想进一步概括您的任务以包含更多应大写的单词(“ And”,“ The”等),则可以创建一个所有单词的List
应该大写并执行:
String newStr = Arrays.stream(str.toLowerCase().split("_"))
.map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1))
.map(e -> notCap.contains(e) ? notCap.get(notCap.indexOf(e)).toLowerCase() : e)
.collect(Collectors.joining(" "));
notCap
是您的List
。