Пока писал этот вопрос и еще раз перечитывал требования, наконец (практически случайно) понял чего от нас хотят. Но решил все-таки опубликовать его, возможно кому-то смогу помочь. Насколько я понимаю, ранее условие было другим, что-то вроде замены исходного текста, находящегося между 3-м и 4-ым слешем и большинство комментариев написано под это условие. Сейчас, как я вижу, условие скорректировано на: "Версия jdk начинается со строки "jdk" и заканчивается на "/"". Представил валидатору несколько решений и под первый вариант условия и под второй, но тем не менее, не мог добиться от него одобрения. При этом каждое решение дает искомый результат. Публикую свои работающие, но тем не менее не принимаемые решения.
// Решение № 1:
public static String changePath(String path, String jdk) {
int one = path.indexOf("/");
int two = path.indexOf("/", one + 1);
int three = path.indexOf("/", two + 1);
int four = three+1;
int five = path.lastIndexOf("/");
String jd = path.substring(four, five);
path = path.replaceAll(jd, jdk);
return path;
}
// Решение №2:
public static String changePath(String path, String jdk) {
int one = path.lastIndexOf("/");
int two = path.lastIndexOf("/", one-1);
int three = two+1;
String jd = path.substring(three, one);
path = path.replaceAll(jd, jdk);
return path;
}
// Решение №3
public static String changePath(String path, String jdk) {
int one = path.indexOf("jdk");
int two = path.lastIndexOf("/");
String jd = path.substring(one, two);
path = path.replaceAll(jd, jdk);
return path;
}
Где же зарыта эта собака? А секрет в том, что, согласно условию, ("Версия jdk начинается со строки "jdk" и заканчивается на "/"") необходимо найти именно "jdk", а потом "/" и все это надо делать в следующем порядке: начало строки - слово "jdk" - от слова "jdk" символ "/". При этом символ "/" нельзя искать с конца, т.к. мы достоверно не знаем сколько может быть в конце символов "/", равно как и не знаем сколько их в начале. То есть нужно представить что Main нам не виден. Удачи всем.
Jack Daniel
28 уровень
Публикую свои старания
Обсуждается
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
8 апреля 2021, 12:59
Допустим, строка такая:
После замены должна получиться такая строка::
Ни одно твое решение так не сделает.
0
Jack Daniel
8 апреля 2021, 13:50
Именно это и указано в описании. Эти решения - ход логики. В последнем абзаце указано, что нужно сделать, чтобы не допустить ошибок. Правильное решение никто не публиковал, иначе было бы не интересно, не так ли?
+2
Владимир Колобов
9 апреля 2021, 20:44
Спасибо за подсказку. Первое решение у меня как раз было - поиск с конца строки. В итоге решение, которое принимает валидатор:
int index = path.indexOf("jdk");
int index2 = path.indexOf("/", index+3);
String first = path.substring(0, index);
String last = path.substring(index2);
String result = first + jdk + last;
return result;
Т.е. по аналогии с лекцией
0
Jack Daniel
10 апреля 2021, 06:47
Мое итоговое решение совершенно другое. Честно говоря, у меня было подобное решение и валидатор его не принял. Публиковать его я не стал, т.к. решил, что оно относится к предыдущей подлекции. Это решение было таким:
public static String changePath(String path, String jdk) {
// int one = path.indexOf("jdk");
// int two = path.lastIndexOf("/");
// String jd = path.substring(one, two);
// path = path.replaceAll(jd, jdk);
// return path;
// String first = path.substring(0, one);
// String second = path.substring(two);
// path = first + jdk + second;
// }
0
Владимир Колобов
10 апреля 2021, 11:01
Я тоже сразу использовал lastIndexOf, но в этом и была ошибка. Получается нужно было рассуждать. Конкретно к этой задаче подходит, а в реальности нет
0
Andrey_java_dev
21 апреля 2021, 12:26
А зачем использовать "index+3", точнее +3 для чего добавлять? Ведь индекс начала jdk будет уже после "/" стоящим перед jdk, т.е. он уже не помешает
0
Владимир Колобов
22 апреля 2021, 19:02
Согласен. Остатки после первых набросков
0