Ho trovato questo in qualche codice che volevo ottimizzare. Ecco lo snipet:È un normale comportamento regex di Java?
tempString = bigBuffer.replaceAll("\\n", "");
tempString = tempString.replaceAll("\\t", "");
Poi ho deciso di usare l'espressione regolare con saggezza e ho fatto questo:
tempString = bigBuffer.replaceAll("[\\n\\t]", "");
Poi un amico mi ha detto di fare questo, invece:
tempString = bigBuffer.replaceAll("\\n|\\t", "");
Dato che mi piace conoscere il risultato delle mie modifiche, ho fatto un test per verificare se fosse una buona ottimizzazione. Quindi, il risultato con (versione java "1.6.0_27") è con il primo codice che è il riferimento al 100%.
Con il tubo è il 121%, quindi è necessario più tempo per eseguire l'operazione.
Con la parentesi quadra è del 52%, quindi è stato necessario meno tempo per eseguire l'operazione.
Perché la regex si comporta diversamente dove dovrebbe essere la stessa?
Martin
Perché dovrebbe essere lo stesso? – BoltClock
Credo che dovrebbe essere lo stesso perché fa la stessa cosa. Forse il compilatore ha bisogno di un'ottimizzazione quando la pipa viene utilizzata con un singolo carattere. – Martin