Как я могу преобразовать все формы определенного слова в строке в нижний регистр?

Я учусь на первом семестре в программировании и полностью застрял на этом.

Я хочу, чтобы все формы слова (например: Привет, привет, привет, ...) были преобразованы в нижний регистр, и я не знаю, как это сделать, не записывая условие для каждого варианта в моем файле. У меня есть много слов, которые мне нужно преобразовать в нижний или верхний регистр, поэтому я понял, что должен быть лучший способ сделать это, но не могу понять, какой.

Есть ли способ получить все эти варианты сразу и преобразовать их в нижний регистр?

Input = "Привет, это моя программа под названием HELLO"

Вывод = "привет, это моя программа под названием привет"

Я только пробовал:

word.replace("ПРИВЕТ", "привет");

word.replace("Привет", "привет"); и так далее..

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
90
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

word.toLowerCase()

или наоборот

word.toUpperCase()

Надеюсь, это поможет!

Примечание. Если вы хотите изменить определенные слова как часть строки, вам придется перебирать каждое слово во введенной строке.

CharlieBONS 18.11.2022 00:53

разве это не возьмет всю строку и не преобразует ее в нижний/верхний регистр? Мне нужно только это конкретное слово во всех формах заглавных букв для преобразования без изменения других слов в строке

theordinaryguy 18.11.2022 00:56

Я изменю свой ответ, чтобы показать вам, как вы можете это сделать, у вас есть пример некоторых слов?

CharlieBONS 18.11.2022 00:57

Я изучаю кодирование на французском языке, поэтому пытаться найти примеры довольно сложно, лол.. Ввод в моем исходном посте, я бы хотел, чтобы HeLlo и HELLO были в нижнем регистре, но в моем файле было бы МНОЖЕСТВО вариаций это слово (привет, привет, ...), поэтому я хотел бы, чтобы все они были строчными без необходимости делать их один за другим, если это возможно

theordinaryguy 18.11.2022 01:03

Я добавил новый ответ, надеюсь, объясняющий вам :)

CharlieBONS 18.11.2022 01:14

При условии, что ваш входной текст является значением «текст» (вы можете сделать имена переменных любыми, какими хотите), он должен выводить правильную строку. Вы можете добавить слова, которые хотите изменить, на строчные и прописные (убедитесь, что при их добавлении они написаны строчными буквами)

String text = "Hello I am No GoodBYE";
        String[] lowercase = {"hello", "goodbye"};
        String[] uppercase = {"no", "yes"};
        String[] split_string = text.split(" ");
        for (int i=0;i < split_string.length;i++){
            for (String low:lowercase){
                if (split_string[i].toLowerCase().equals(low)){
                    split_string[i] = split_string[i].toLowerCase();
                }

        }
            for (String upper:uppercase){
                if (split_string[i].toLowerCase().equals(upper)){
                    split_string[i] = split_string[i].toUpperCase();
                }
            }
    }
        String final_result = "";
        for(String word:split_string){
            final_result = final_result + " " + word;
        }
        System.out.println(final_result);


Я пробовал, и это сработало! Хотя я боюсь, что не смогу его использовать, поскольку мы не изучили некоторые части кода, который вы написали, поэтому мой учитель может не принять его, я использовал регулярное выражение, рекомендованное другим пользователем, большое спасибо за ваш помощь :) !

theordinaryguy 18.11.2022 02:13
Ответ принят как подходящий

Для регулярного выражения:

word = word.replaceAll("(?i)hello", "hello");

Это замена "без учета регистра"; т. е. все экземпляры «привет» независимо от регистра (привет, привет, привет и т. д.) будут заменены на «привет».

Я нашел эту статью особенно полезной при изучении регулярных выражений. Вот живой рабочий пример.

Вы можете использовать java.util.regex.Pattern с параметром CASE_INSENSITIVE:

Pattern pattern = Pattern.compile(Pattern.quote("hallo"), Pattern.CASE_INSENSITIVE);
String test = "Hallo FoO HallO BaR HaLLo BAz";  
String replaced = pattern.matcher(test).replaceAll("hallo");
// Output: hallo FoO hallo BaR hallo BAz

Идея:

  • Измените всю строку на более низкую: HeLlo There heLLO WorlD -> hello there hello world
  • Ищите индекс целевого слова: индексы "hello" -> [0, 12]
  • Измените индексы в оригинале: hello There hello WorlD

псевдо

String toLower(String input, String replacement) {
     indices = input.toLower().allIndecesOf(replacement)
     result = input.clone()
     for i in indices {
        result = result.replace( i, replacement )
     }
     return result
}

Другие вопросы по теме