Domanda

Se devi usare String.Replace () per sostituire il test 50 volte, devi essenzialmente creare una nuova stringa 50 volte. StringBuilder.Replace () fa questo in modo più efficiente? Ad esempio, dovrei usare StringBuilder se sostituirò molto testo, anche se non aggiungerò alcun dato ad esso?

Sto usando .NET, ma presumo che questo sarebbe lo stesso di Java e forse di altre lingue.

È stato utile?

Soluzione

Questo è esattamente il tipo di cosa per cui StringBuilder è - ripetute modifiche dello stesso oggetto di testo - non è solo per una concatenazione ripetuta, anche se sembra essere ciò che viene usato più comunemente.

Altri suggerimenti

Dipende se la dimensione della sostituzione è più grande della stringa sostituita.

StringBuilder over alloca il suo buffer , mentre una stringa contiene solo il numero di caratteri che contiene.

La proprietà StringBuilder.Capacity è il numero di caratteri che il buffer conterrà, mentre StringBuilder.Length è il numero di caratteri in uso.

Normalmente dovresti impostare StringBuilder.Capacity su un valore maggiore della stringa risultante prevista. Altrimenti StringBuilder dovrà riallocare il suo buffer. Quando StringBuilder rialloca il suo buffer, lo raddoppia in termini di dimensioni , il che significa che dopo che una coppia lo rialloca probabilmente è significativamente più grande di quello che deve essere, per impostazione predefinita la capacità inizia a 16.

Impostando il valore di Capacità all'avvio (ad esempio nel costruttore) si salvano le riallocazioni del buffer di StringBuilder. Puoi utilizzare StringBuilder.MaxCapacity per limitare alla massima capacità a cui è possibile espandere StringBuilder.

Sì, lo è. String.Replace crea sempre una nuova stringa - StringBuilder.Replace no.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top