2013-03-09 9 views
7
String sentence = "Any simpler way to get the last element of a Java array?"; 
String lastToken = sentence.split(" ")[sentence.split(" ").length-1]; 

Mi piacerebbe dividere la frase e ottenere l'ultimo token. Sento che il mio modo di farlo è un po 'troppo imbarazzante. Fondamentalmente, voglio che la seconda affermazione sia più breve. È possibile?Un modo più semplice per ottenere l'ultimo elemento di un array Java?

Modifica: Quello che sto cercando: 1) non è necessario dichiarare l'array separatamente 2) non è necessario dividere la frase due volte. Sarebbe bello se esistesse un metodo chiamato last con array. Sospetto che sia impossibile ma voglio essere sicuro.

+3

Stai dividendo la stessa cosa due volte. Tu non vuoi farlo. Anche più corto non significa meglio. –

+0

Quindi stai cercando 'array?'? –

+0

Solo sottostringa dall'ultimo indice di un '\\ s +', o carattere di spazio bianco, come ''''. –

risposta

11

Un altro modo per ottenere l'ultimo token/parola

String lastToken = sentance.replaceAll(".* ", ""); 
+1

Ho trovato questo più elegante. Grazie. –

+1

+1, molto elegante. Anche se userei 'sentance.trim(). ReplaceAll (". * "," ");' Per evitare String vuota a causa di spazi bianchi finali. – jlordo

+0

@jlordo - Questo è già stato indicato. Tuttavia, ciò che ti manca è che la soluzione originale soffre dello stesso problema ... quindi potresti vederlo come un * requisito * che qualsiasi soluzione dovrebbe comportarsi nello stesso modo. –

12

Devi solo dividerlo una volta e prendere l'ultimo elemento.

String sentence = "Any simpler way to get the last element of a Java array?"; 
String[] tokens = sentence.split(" "); 
String lastToken = tokens[tokens.length-1]; 

E 'imbarazzante, ma non c'è davvero altro modo per farlo se non si ha conoscenza anticipata della lunghezza della stringa.

+1

Perché il down-vote ??up-vote 1+ –

+0

Ovviamente è possibile astrarre la logica 'tokens [tokens.length-1]' in qualche funzione di utilità che si potrebbe chiamare come 'getLastElement (sentence.split (" "))' o qualcosa del genere. – poke

+0

Mi spiace di non aver chiarito la mia intenzione. Non voglio farlo dichiarando l'array separatamente. –

3
String sentence = "Any simpler way to get the last element of a Java array?"; 
String lastToken = sentence.substring(sentence.lastIndexOf(" ") + 1); 
+0

Questo è abbastanza specifico per la situazione delle stringhe. Non funzionerà con un array reale, che era la vera domanda ... – poke

+0

Intendeva array come nell'array che la stringa produce quando è divisa. –

+0

@Legend Lo so, ma ho capito che la divisione delle stringhe era più un modo per ottenere un esempio. – poke

3

Se si sta facendo questo solo una volta, quindi la soluzione di Peter Lawrey è più breve, anche se IMO è più difficile da capire rispetto alla versione originale.

Se si sta facendo questo in più punti, allora il seguente è meglio:

public String getLastToken(String str, String separatorRegex) { 
    String tokens[] = str.split(separatorRegex); 
    return tokens[tokens.length - 1]; 
} 

e poi

String lastToken = lastToken(sentence, " "); 

... che è più elegante di qualsiasi trucco geniale ... IMO.


Il mio punto più generale è che il tempo trascorso cercando di fare una sola riga di codice più corto probabilmente è tempo sprecato ... o peggio:

  • Dal punto di vista di un altro leggere il codice, una riga contro due righe è irrilevante.
  • Se il trucco intelligente che rende la linea più breve è oscuro, allora hai effettivamente fatto una COSA MALE usandola ... dal punto di vista del prossimo ragazzo che legge/mantiene il tuo codice.
  • Se la modifica intelligente è meno efficiente rispetto alla versione poco elegante, è possibile che introduca un problema di prestazioni.

Ma se si sta ripetendo quella linea di codice (o simile) in molti punti, la soluzione migliore è usare l'astrazione procedurale. Scrivi un metodo statico o di istanza ... una volta ... e chiamalo più volte.

+0

Consigli presi. Grazie mille. –

Problemi correlati