Если вы действительно хотите, чтобы 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
И затем, если вы хотите немного обобщить свою задачу, включив в нее больше слов, которые должны быть написаны заглавными буквами («И», «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
.