Задача не сложная, но хочется посмотреть, как ее могут решить ребята, которые заходят на форум.
Итак. Дана строка, любая, но например эта: I love Java!
Задание: Удалить из данной строки все символы 'a'.
Приветствуются любые решения. В понедельник положу свои несколько решений.
И да, голосуйте плюсами за выложенные решения ребят. До встречи в понедельник!
Vladimir
40 уровень
Задача на выходные.
Комментарии (27)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
VladimirMaster
2 ноября 2020, 13:20
Просил Регину, как представителя администрации вмешаться в непонятку с сокрытием готовых решений. Смотрю, появились скрытые решения ребят. Возможно проблема решена, но посмотрим. Регина, спасибо за помощь!
+2
Ksenia MarioMaster
8 ноября 2020, 10:02
+1
Ksenia MarioMaster
2 ноября 2020, 08:14
ну если код работает :)
+3
Ksenia MarioMaster
3 ноября 2020, 19:10
код скопирован и переименован с исходного replaceAll() в Стрінга, потому дополнения можно читать прямо с документации :)
0
SolomonVP🌅 ☕️ в 🧑🏻💻
1 ноября 2020, 23:21
Взялся только потому что я туп в задачах на удаление символов.
Ввел в гугле "как удалить символы из строчки" и вышел на страницу JavaRush про replace.
Спасибо за задачу. :) Побольше бы таких, для 1-15 лвл(основы слабо закреплены, приходится сейчас останавливаться чтобы закреплять в других источниках).
Не думал что будет так легко, моё решение(возможно в какой-то степени неправильное):
+5
hidden #2322530
1 ноября 2020, 09:57
аналогично как у Павла, только у него за счёт метода replaceAll больше действий под капотом будет. но зато в блоке 1 команда всего)
+2
Ksenia MarioMaster
31 октября 2020, 16:50
а куда решения исчезают? О_о
ПС спасибо за задачки :)
+1
VladimirMaster
31 октября 2020, 17:44
Блин, скорее всего снова администрация скрывает решения.
0
Pavlo Plynko Java-разработчик в CodeGym Expert
2 ноября 2020, 10:46
Восстановил :)
Уточню кто это шалит) скорее всего кто-то идентифицировал как правильные решения 😂
0
Justinian Judge в Mega City One Master
2 ноября 2020, 11:12
отправил жалобу на твое сообщение ☺️
это я так тестировал, хотел посмотреть где же там можно идентифицировать правильные решения, но там меню не было, просто жаловаться :)
Лично у меня догадка, что это автоматическая система, которая срабатывает каким-то образом на код, а то только на этих вопросах Вовы такое вроде замечено было, ведь живой человек навряд бы удалил. Загадка в общем )
+1
Ksenia MarioMaster
2 ноября 2020, 11:20
коммент
написан вчера, а удалили сегодня пару часов назад.
как-то система не очень то бьістрая :)
0
Justinian Judge в Mega City One Master
2 ноября 2020, 12:38
хм...дивина :)
0
hidden #2322530
2 ноября 2020, 14:54
😎
0
Артем В.
31 октября 2020, 07:53
Примерно тоже самое что и в прошлой задаче, немного отредактировал код, надеюсь на этот раз не удалят :)
Получилось решение идентичное решению Dmytro Yantsybaiev.
Ну а самое простое и самое очевидное:
+1
Ksenia MarioMaster
2 ноября 2020, 11:12
зачем тут юзать StringBuilder?
0
hidden #2322530
2 ноября 2020, 14:55
под капотом replaceAll() используется StringBuilder. ведь строки имутабл.
0
Ksenia MarioMaster
2 ноября 2020, 15:29
типа вот так не работает?
0
Михаил
2 ноября 2020, 15:36
В теории на каждое изменение строки мы будем создавать новую строку, то есть добавить по символу 100 раз - создать 100 новых строк, со всеми сопутствующими расходами.
Но на практике, кроме старых версий явы, компилятор оптимизирует данный код до StringBuilder, поэтому разницы не должно быть. В идеале.
+5
hidden #2322530
2 ноября 2020, 15:46
работает. но с точки зрения ресурсов Михаил выше всё правильно написал. метод replaceAll внутри как раз состоит из этой строки:
а связано это с тем, что replaceAll принимает регулярки. и если копнуть глубже, там будет как раз StringBuilder +4
Михаил
2 ноября 2020, 15:51
StringBuilder при объединении большого количества строк быстрее чем String, так как при объединении двух строк происходит создание новой строки, а не дописывание к старой.
Так что мы создадим столько строк, сколько будет дописано символов.
Правда на самом деле, практически в любой ситуации, код со String будет оптимизирован до StringBuilder, поэтому на практике разницу можно и не заметить.
И еще один момент, надо учитывать возможную длину строки, так как по умолчанию StringBuilder создается на 16 символов, и если попытаться записать больше, то будет создан новый StringBuilder на (х * 2) + 2 символов.
Написав StringBuilder sb = new StringBuilder(str.length()); мы получим неплохую оптимизацию.
В теории .replace внутри построен на регулярных выражениях и достаточно тяжеловесен.
Но помучив профилировщик, замеры показали, что при небольшой длине строки (примерно до 20 символов) разницы практически нет. При 30 символах replace чуть медленнее исходного варианта, а вариант с оптимизацией str.length() быстрее примерно на 10%.
При 100 символах вариант без оптимизации медленнее на 20%, .replace на 50%
При 1000 символах, как ни странно, вариант без оптимизации медленнее на 8%, .replace на 65%.
Тестировал в JDK 11 Liberica
+2
Alukard Vampire hunter в The Hellsing Expert
31 октября 2020, 06:21
Хз, реплейс алл.
+2
VladimirMaster
31 октября 2020, 07:28
Положи сюда своё решение, если оно есть.
0
VladimirMaster
30 октября 2020, 17:21
Ребята, выкладывайте свои решения, не стесняйтесь. Решения всякие приветствуются.
0
Pavlo Plynko Java-разработчик в CodeGym Expert
30 октября 2020, 16:22
наворотил все что вспомнил 😁
+6
VladimirMaster
30 октября 2020, 17:20
Отлично, ждем голосования.
0
Dmytro Yantsybaiev
30 октября 2020, 16:21
Как-то так 🙂
+2
VladimirMaster
30 октября 2020, 17:20
Отлично, ждем голосования.
0