2015-05-30 10 views
7

Ho molte parole che necessitano di elaborazione e tutte terminano con ., Quale opzione ha la migliore complessità temporale?La sottostringa o la sostituzione sono più veloci per rimuovere l'ultimo carattere in una stringa?

  1. word.substring(0, word.length()-1)

  2. word.replaceAll("\\.","")

  3. word.replace(".", "")

Oppure, c'è un modo migliore?

+6

Del _three_, il primo è il più veloce poiché è O (1) (ignorando i caratteri di copia che fanno tutti questi). Gli altri devono scansionare la stringa completa. –

+7

Si noti che la seconda opzione sostituirà tutto nella stringa poiché 'replaceAll' richiede un * regex * e' .' è il carattere jolly. – Vulcan

+1

In questo caso è meglio usare un 'StringBuilder' o altri strumenti di elaborazione del testo. –

risposta

11

Un semplice test (con JDK1.7.0_75) può mostrare la differenza:

private static final int LENGTH = 10000; 

public static void main(String[] args) { 
    String[] strings = new String[LENGTH]; 
    for (int i = 0; i < LENGTH; i++) { 
     strings[i] = "abc" + i + "."; 
    } 
    long start = System.currentTimeMillis(); 
    for (int i = 0; i < strings.length; i++) { 
     String word = strings[i]; 
     word = word.substring(0, word.length()-1); 
    } 
    long end = System.currentTimeMillis(); 

    System.out.println("substring: " + (end - start) + " millisec."); 

    start = System.currentTimeMillis(); 
    for (int i = 0; i < strings.length; i++) { 
     String word = strings[i]; 
     word = word.replaceAll(".", ""); 
    } 
    end = System.currentTimeMillis(); 

    System.out.println("replaceAll: " + (end - start) + " millisec."); 

    start = System.currentTimeMillis(); 
    for (int i = 0; i < strings.length; i++) { 
     String word = strings[i]; 
     word = word.replace(".", ""); 
    } 
    end = System.currentTimeMillis(); 

    System.out.println("replace: " + (end - start) + " millisec."); 

} 

uscita:

sottostringhe: 0 millisecondi.

replaceAll: 78 millisec.

sostituire: 16 millisec.

Come previsto, la substring è più veloce perché:

  1. Si evita la compilazione di un'espressione regolare.
  2. È tempo costante: creazione di un nuovo String in base agli indici di inizio e fine specificati.
Problemi correlati