Производительность string.replaceAll() страдает от неизменности строк?

Допустим, я вызвал replaceAll() для большой строки, которая заменила 1000 соответствующих экземпляров. Означает ли это, что 1000 строк были созданы и переназначены в процессе из-за неизменности строк? Есть ли более быстрые альтернативы?

2 ответа

Решение

Если вы покопаетесь в String, вы увидите, что он делегирует replaceAll() в Pattern & Matcher,а Matcher.replaceAll() использует StringBuilder для хранения полученного в итоге значения.

Так что нет, String.replaceAll() не создает более небольшого количества объектов.

Вы можете попробовать с StringBuffer/ StringBuilder, так как они являются изменяемыми CharSequence s:

CharSequence veryBigString = new StringBuilder();
Pattern.compile(regex).matcher(veryBigString).replaceAll(replacement);
Другие вопросы по тегам