Пользователь введет строковое значение, которое будет содержать два «хлебных» слова. Моя программа выведет строку, которая находится между первым и последним появлением «хлеба» в заданной строке, или напечатает «Бутерброда нет!» если нет двух кусков хлеба. Например, для ввода «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