String.replace(CharSequence, CharSequence) zbyt wolne

0

Mój program w pętli używa
String.replace(CharSequence, CharSequence)

Niestety spowalnia to program. Jest jakaś alternatywa?

0

Lepsze sa StringBuilder(Java 1.5) i StringBuffer (mutable). Jeden z nich wydaje mi sie ze string builder jest niesynchronizowany co oczywiscie dziala szybciej. Oczywiscie ma to swoje zle strony (watki).

0

I co w związku z tym? Wiem o tych klasach, ale one nie posiadają metody replace ;P
Przerobiłem mój kod trochę, aby używam MessageFormat, ale jest on tylko minimalnie szybszy. Pocieszam się tym, że przynajmniej kod jest teraz ładniejszy.

0
replace

public StringBuilder replace(int start,
                             int end,
                             String str)

    Replaces the characters in a substring of this sequence with characters in the specified String. The substring begins at the specified start and extends to the character at index end - 1 or to the end of the sequence if no such character exists. First the characters in the substring are removed and then the specified String is inserted at start. (This sequence will be lengthened to accommodate the specified String if necessary.)

    Parameters:
        start - The beginning index, inclusive.
        end - The ending index, exclusive.
        str - String that will replace previous contents. 
    Returns:
        This object. 
    Throws:
        StringIndexOutOfBoundsException - if start is negative, greater than length(), or greater than end.

P.S. Nastapnym razem porponuje sie dokladniej sie rozejrzec

0

Droga kicho, czy udzielając się na tym forum, robisz sobie żarty? Udajesz głupiego, czy naprawdę taki jesteś? Metoda replace z klasy StringBuilder nie odpowiada metodzie String.replace(CharSequence, CharSequence) z klasy String!

0

Pytales czy mozna jakos zmienic MOZNA korzystajac ze StringBuildera mozna uzyskac lepsze wynik. Calosci rozwiazania ci nie podam bo nie mam na to czasu ale WYBRANIE STRINGBUILDERA jest pleszpym rozwiazaniem :-P

Proponuje tez zobaczyc java regex Klasa Matcher i Pattern.

0

Jeśli nie masz nic konkretnego do powiedzenia, to proszę, abyś się nie odzywał i nie próbuj na siłę pokazać, że miałeś rację.

P.S.
Zapewne lubisz, gdy ostatnie zdanie należy do ciebie, więc pewnie odpowiesz mi na ten post kolejnym głupim i nic nie wnoszącym do dyskusji tekstem.

0

No comments:(

0

Nie wiem, czy będzie szybciej, ale może spróbuj użyć klas Pattern i Matcher z java.util.regex.

Bardzo ważne, aby Pattern.compile nie wywoływać w pętli.

Pattern p = Pattern.compile("ab");
String s = "ababab";
for (int i = 0; i<10000000; i++) {
    Matcher m = p.matcher(s);
    String w = m.replaceAll("cd");
}  

EDIT: Właśnie sprawdziłem i Pattern + Matcher są dużo szybsze, szczególnie dla długich napisów.

0

Wyluzuj czlowieku. Cos taki spiety. ja ci tyko proponuje zajrzec do tych klas bo string bardziej obciaza pamiec. Bierz pod uwage ze nie znam cie a twoja wiedze oceniam tylko po tym zapytaniu.

P.S. Przeciez nie bede ci tlumaczyl co dzieje sie na stosach, bo znowu sie obrazisz. :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1