Пользователь введет строковое значение, которое будет содержать два «хлебных» слова. Моя программа выведет строку, которая находится между первым и последним появлением «хлеба» в заданной строке, или напечатает «Бутерброда нет!» если нет двух кусков хлеба. Например, для ввода «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')) {
}
}
На самом деле, я искал что-то немного другое. Например, для ввода «breadlobread» вывод должен быть «lol». Поэтому я беру только 1 слово, возможно, состоящее из «бутерброда» (отображает слово между словами «хлеб»).
Что ж, этот код применим и к этому сценарию: выведет хлеб лол. @coder123 Просто попробуйте String text = "breadlolbread"; и протестировать его.




Вы можете сделать это двумя различными способами. Первый — создать регулярное выражение, которое будет соответствовать всему предложению, то есть двум словам, предоставленным пользователем, со словом между ними.
Другой способ, вероятно, проще. Вы можете использовать метод 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] не выведет вас за пределы.
Ну конечно; естественно! Я написал код здесь и просто забыл об этом. Исправляем это сейчас. Спасибо! Что касается i+2, условие в цикле for гарантирует, что мы закончим итерацию с индексом, равным wordSplit.length - 3
Вы можете сделать что-то вроде:
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");
}
}
Взгляните на мой ансир и, если он вам подходит, примите его. @coder123