Решил данную задачу через простой ArrayList, но интересно как можно решить через StringBuffer/StringBiulder, т.к. у самого не получилось, подскажите пожалуйста, гугол дал только не работающий способ( ну или я не так что-то делал)
Код из гугла:
String searchWord = scrfield.getText();
String changeWord = chngfield.getText();
StringBuilder sb = new StringBuilder();
try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)))) {
String strLine;
while ((strLine = br.readLine()) != null) {
sb.append(strLine.replace(searchWord, changeWord)).append("\r\n");
}
}
try (FileWriter fileWriter = new FileWriter(file)) {
fileWriter.write(sb.toString());
}
Gleb Vlasov
25 уровень
Как решить задачу через StringBuffer/StringBiulder?
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Владислав Backend Developer
3 апреля 2020, 20:00
Между классами StringBuffer/StringBuilder и String разница только в том, что, при создании обычной строки String и последующем ее изменении, будет создаваться новая строка. Например, напишешь ты:
String animal = “cat”
А затем захочешь переменной animal присвоить значение “dog”.
По итогу знаешь, что получится? «Под капотом» создастся новая строка с именем animal, которой будет присвоено значение “dog”. Если ты в будущем допишешь букву “s”, тем самым превратив “dog” в “dogs”, то создастся новая переменная, но не изменится старая. Старая станет мусором, а мусоросборщик ее потом, когда-нибудь, «выкинет».
По итогу, в моем примере, было создано 3 разные строки.
В то же время, при использовании stringbuffer/stringbuilder, новые строки создаваться не будут, и на производительности, при частом изменении одной и той же строки, это будет сказываться наилучшим образом. Никакого мусора скапливаться не будет.
Итого, получается, что stringbuffer/stringbuilder - это аналоги обычного string. И воспринимать их нужно как обычные строки, которые просто по-другому записываются. И в какой-то ситуации целесообразнее использовать их, вместо обычной string.
Stringbuilder отличается от stringbuffer тем, что stringbuilder не синхронизирован, и с нитями его использовать не рекомендуется. Но зато stringbuilder работает быстрее, чем stringbuffer.
+1
Ярослав
3 апреля 2020, 19:42
У меня было вот так:
0
Gleb Vlasov
4 апреля 2020, 23:12
можешь объяснить как оно работает?
0
Ярослав
5 апреля 2020, 17:43
Я заранее создаю СтрингБуфер из 30 пробелов. По той причине, что там, где не будет символов, будут пробелы. Потом, в пределах заранее заданной длины, заменяю. пробелы буфере на содержимое аргс[].
Потом из буфера делаю строку.
0