Как реализовать StringBuilder.replace (String, String) с точки зрения String? - PullRequest
2 голосов
/ 14 сентября 2009

String содержит множество полезных методов, таких как String.replace (CharSequence, CharSequence) , которые полностью отсутствуют в StringBuilder . Есть ли причина, почему?

Есть ли простой способ реализовать эти методы без огромных затрат на вызов StringBuilder.toString () , который копирует строку каждый раз?

Ответы [ 2 ]

4 голосов
/ 14 сентября 2009

Поскольку StringBuilder обеспечивает как indexOf(String,int), так и replace(int,int,String), можно легко воспроизвести функциональность. Единственным недостатком здесь является то, что аргументы не могут быть объектами CharSequence, но вместо этого должны быть String s.

При обработке огромных строковых объектов и выполнении множества операций замены можно использовать специализированный API, например Ropes for Java .

0 голосов
/ 14 сентября 2009

Хорошо, Pattern.matcher () принимает CharSequence, так что вы можете выполнить операцию сопоставления с исходным компоновщиком, не копируя его в новую строку.

Что касается замены, если она нетривиальна (не текст той же длины), вы, скорее всего, все равно захотите скопировать в новый StringBuilder (как это было бы при поиске / замене с использованием Matcher). в противном случае вы можете в конечном итоге повторно скопировать свои данные много раз в исходном StringBuilder (поскольку любая вставка / удаление в середине StringBuilder требует копирования конечных данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...