Как я могу проверить, встречается ли определенная строка несколько раз в другой строке?

#java #string

#java #строка

Вопрос:

Мой код принимает входные данные от пользователя, и если есть две "bread" подстроки, печатается строка между ними. Например, "breadjavabread" выходные "java" данные . Однако, когда в моем коде есть только одна "bread" строка, появляется ошибка. Например, "usjdbbreaddudub" . Как я могу это решить?

 String cheese = "no bread";
String bread = "bread";
for (int i = 0; i < s.length() - 5; i  )
{
  String m = s.substring(i, i   5);
  if (m.equals(bread))
  {
    cheese = s.substring(s.indexOf(bread)   bread.length(), s.lastIndexOf(bread));
  }
}

System.out.print(cheese);

 

Комментарии:

1. попробуйте использовать split («хлеб») и посмотрите, что это вам даст. также проверьте, начинается ли она с или заканчивается «хлебом», на всякий случай

2. Если вы получили сообщение об ошибке, поделитесь сообщением об ошибке

3. кроме того, вы можете использовать регулярное выражение, но в любом случае, какой результат вам нужен в обоих случаях. И что s в вашем вопросе?

4. Поместите s.indexOf(bread) и s.lastIndexOf(bread) в переменные, проверьте, не являются ли они неравными.

Ответ №1:

Есть много способов решить эту проблему. Вот 3 из них

  1. Сравнение indexOf и lastIndexOf
     String cheese;
    String bread = "bread";
    int firstIndex = s.indexOf(bread);
    int lastIndex = s.lastIndexOf(bread);
    if (firstIndex == -1) {
        cheese = "no bread";
    } else if (lastIndex == firstIndex) {
        cheese = "only one bread";
    }
    cheese = s.substring(firstIndex   bread.length(), lastIndex);
    
    System.out.print(cheese);
     
  2. Регулярные выражения:
     Matcher m = Pattern.compile("bread(. ?)bread").matcher(s);
    if (m.find()) {
        System.out.println(m.group(1));
    } else {
        System.out.println("Not enough bread");
    }
     
  3. Разделение:
     String[] parts = s.split("bread");
    if (parts.length == 3) {
        System.out.println(parts[1]);
    } else {
        System.out.println("Not enough or too much bread");
    }