Нужно преобразовать подчеркнутые слова в удобочитаемую форму? - PullRequest
0 голосов
/ 08 января 2019

Мне нужно преобразовать разделенное подчеркиванием слово, такое как NAME_OF_THINGS, в более удобный для чтения формат, такой как «Название вещей», и в некоторых случаях мне нужно что-то вроде «Имени вещей».

У меня есть код ниже, который я конвертирую, используя класс CaseFormat от Google guava. Но это не дает мне точных ожидаемых результатов. Может кто-нибудь предложить мне лучший способ конвертировать это?

StringUtils.join(StringUtils.splitByCharacterTypeCamelCase(
                 CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, input)), " ")

Ввод: NAME_OF_THINGS
Ожидаемое: Наименование вещей
Факт: Название Вещи

PS: мне тоже нужно что-то вроде Name of Things (Of to of)

Ответы [ 4 ]

0 голосов
/ 09 января 2019

Если вы действительно хотите, чтобы 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.

0 голосов
/ 08 января 2019

Или этот

input.substring(0,1) + input.substring(1).replaceAll("_", " ").toLowerCase()
0 голосов
/ 08 января 2019

Использование Pattern:

String result = Pattern.compile("_")
                .splitAsStream(source)
                .map(s -> Character.toUpperCase(s.charAt(0)) + s.substring(1).toLowerCase())
                .collect(Collectors.joining(" "));

Результат:

Name Of Things
0 голосов
/ 08 января 2019

Используя 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();

Это дает:

Наименование вещей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...