Итак, вам нужно принять это:
public static boolean xyzThere(String s) {
return !s.contains(".xyz") && s.contains("xyz");
}
И разбей его.
Для начала недостаточно сказать, содержит ли строка xyz, потому что (как в случае неудачного теста) в строке может быть много экземпляров xyz.
Так что вам нужно выяснить, в чем логика.
Один из способов выразить это было бы сказать:
Мы всегда терпим неудачу , если не существует хотя бы одной последовательности xyz, которая также не является .xyz
Так что, может быть, мы ищем петлю.
public static boolean xyzThere(String str) {
boolean result = false;
String s = str;
int n = s.indexOf("xyz");
while(n >= 0) {
// if n is 0 then there was no preceeding dot so we win
if (n == 0) { return true; }
// if the immediately preceedding character was not a '.' return true
char c = s.charAt(n-1);
if (c != '.') { return true; }
// otherwise keep looking until no more instances of "xyz" in the string
s = s.substring(n + 3);
n = s.indexOf("xyz");
}
return result;
}