CodingBat xyzThere

0

Возвращаем true, если данная строка содержит внешний вид "xyz", где xyz непосредственно не предшествует периоду (.). Так что "xxyz" считается, но "x.xyz" этого не делает.

Я пытаюсь решить эту проблему и не могу найти, почему "abc.xyzxyz" все еще возвращает false

public boolean xyzThere(String str) {
   if(str.contains("xyz")) {
      int xyz = str.indexOf("xyz");
      if(xyz!=0 && str.substring(xyz-1,xyz).equals(".")) {
         return false;
      }
      return true;
   }
   return false;  
}
  • 0
    Хорошее форматирование кода помогает вам и нам. Пожалуйста, улучшите форматирование вашего размещенного кода, чтобы все мы могли лучше видеть, что происходит.
  • 0
    Я думал, что это было отформатировано просто отлично
Показать ещё 2 комментария
Теги:

2 ответа

1

Он возвращает false, потому что этот оператор, if(xyz!=0 && str.substring(xyz-1,xyz).equals(".")) { Истинно.

xyz равно 4, а str.substring(3, 4) - ".".

  • 0
    Ах, теперь я вижу, в чем проблема, что бы вы посоветовали мне сделать, чтобы она вернулась. .xyzxyz проходит через str.contain и попадает в секунду в операторе if. любой другой ввод работает, кроме случаев, когда строка содержит и .xyz, и xyz отдельно
  • 0
    @Tolkingdom: ваш метод может сделать это в одной строке кода, с двумя булевыми тестами в сочетании с оператором && , вот и все. Но вы должны экспериментировать и попытаться понять это самостоятельно.
Показать ещё 2 комментария
0

В Python будет работать следующий код:

def xyz_there(str):
 if len(str) < 3:
  return False
 for i in range(len(str)):
  if str[i-1]!= '.':
   if str[i:i+3]=='xyz' :
    return True
 else:
  return False

Ещё вопросы

Сообщество Overcoder
Наверх
Меню