2009-08-09 7 views

Odpowiedz

13

Jeśli kopać String, zobaczysz że to delegaci replaceAll(), aby Pattern & Matcheri Matcher.replaceAll() korzysta z StringBuilder przechowywać ostatecznie zwracaną wartość.

Tak nie, String.replaceAll() nie tworzy więcej niż niewielką liczbę obiektów.

+0

pamiętać, że tworząc nowy wzór może być kosztowne. W zależności od tego, jak często jest on wywoływany, może być wydajniejsze tworzenie Wzorca i tworzenie Matchera. Profilowanie aplikacji zawsze będzie zawierało informacje, czy jest to konieczne, czy przedwczesna optymalizacja. – AngerClown

-1

można spróbować z StringBuffer/StringBuilder, ponieważ są one ZmienneCharSequence s:

CharSequence veryBigString = new StringBuilder(); 
Pattern.compile(regex).matcher(veryBigString).replaceAll(replacement); 
+1

Nie ma znaczenia, czy 'bardzoBigString' jest zmienne; 'replaceAll()' nadal utworzy nowy StringBuffer do wykonania pracy i zwróci wynik jako nowy String. Czy to był twój punkt widzenia? –