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

Пользователь введет строковое значение, которое будет содержать два «хлебных» слова. Моя программа выведет строку, которая находится между первым и последним появлением «хлеба» в заданной строке, или напечатает «Бутерброда нет!» если нет двух кусков хлеба. Например, для ввода «breadlobread» вывод должен быть «lol».

String a = "There is no sandwich!";

for (int i =0;i<len-3;i++) {
    if ((s.charAt(i)== 'b')&&(s.charAt(i+1)== 'r')&&(s.charAt(i+2)== 'e')&&(s.charAt(i+3)== 'a')&&(s.charAt(i+4)== 'd')) {

    }   
}

Взгляните на мой ансир и, если он вам подходит, примите его. @coder123

MS90 07.04.2019 21:02

На самом деле, я искал что-то немного другое. Например, для ввода «breadlobread» вывод должен быть «lol». Поэтому я беру только 1 слово, возможно, состоящее из «бутерброда» (отображает слово между словами «хлеб»).

coder123 07.04.2019 21:50

Что ж, этот код применим и к этому сценарию: выведет хлеб лол. @coder123 Просто попробуйте String text = "breadlolbread"; и протестировать его.

MS90 07.04.2019 22:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
353
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете сделать это двумя различными способами. Первый — создать регулярное выражение, которое будет соответствовать всему предложению, то есть двум словам, предоставленным пользователем, со словом между ними.

Другой способ, вероятно, проще. Вы можете использовать метод split(), чтобы разбить строку на отдельные слова, а затем просто перебрать весь массив, чтобы найти слова, которые вы ищете. Примером может быть:

String userWord = "bread";
String word = "There are bread various bread breeds of dogs";
String[] wordSplit = word.split("");
for(int i = 0; i < wordSplit.length-2; i++) {
    if (wordSplit[i].equals(userWord) && wordSplit[i+2].equals(userWord)) {
        System.out.println(wordSplit[i+1]);
    }
}

Я уверен, что вы просто забыли об этом, но метод String#split() требует аргумента. И вы не сравниваете строки на равенство с ==. Вместо этого используйте метод String#equals(). Также убедитесь, что [i+2] не выведет вас за пределы.

DevilsHnd 07.04.2019 20:54

Ну конечно; естественно! Я написал код здесь и просто забыл об этом. Исправляем это сейчас. Спасибо! Что касается i+2, условие в цикле for гарантирует, что мы закончим итерацию с индексом, равным wordSplit.length - 3

Dominik Wosiński 07.04.2019 20:56
Ответ принят как подходящий

Вы можете сделать что-то вроде:

  public static void main(String[] args) {
        String text = "There are two bread which are very cool bread.";
        String bread = "bread";
        //make a new string by taking everything from first index of bread string+length of a bread string word and the last index of bread.
        String inBEtween = text.substring(text.indexOf(bread)+bread.length(), text.lastIndexOf(bread));
        //if the length inbetween trimmed of leading and tailing whitespace is greater than 0, print inBetween, otherwise print "No sandwich".
        if (inBEtween.trim().length() > 0) {
            System.out.println(inBEtween);
        } else {
            System.out.println("No sandwich.");
        }
    }

Конечно, вы могли бы сделать это и с регулярным выражением

 public static void main(String[] args) {
        String text = "There are two bread bread.";
        String pattern = "(?<=bread)(.*)(?=bread)";
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(text);
        if (m.find()) {
            System.out.println(m.group());
        } else {
            System.out.println("No sandwich");
        }
  }

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