2013-03-06 17 views
29

Sto provando a prendere gli ultimi tre caratteri di qualsiasi stringa e salvarlo come un'altra variabile String. Sto attraversando un periodo difficile con il mio processo di pensiero.Ottieni gli ultimi tre caratteri da qualsiasi stringa: Java

String word = "onetwotwoone" 
int length = word.length(); 
String new_word = id.getChars(length-3, length, buffer, index); 

Non so come utilizzare il metodo getChars quando si tratta di buffer o indice. Eclipse mi sta facendo avere quelli lì dentro. Eventuali suggerimenti?

+0

Il buffer è un 'char []' dove i caratteri andranno, e index è l'inizio di quella matrice in cui si desidera iniziare la copia. Basta creare un carattere [] di dimensione 3 e impostare l'indice su 0. Anche se la sottostringa sarebbe probabilmente meglio –

+0

concordare con mark convert a char [] (String.toCharArray() e quindi stampare gli ultimi 3) – amitmah

risposta

106

Perché non solo String substr = word.substring(word.length() - 3)?

Aggiornamento

Si prega di assicurarsi di verificare che il String è di almeno 3 caratteri prima di chiamare substring():

if (word.length() == 3) { 
    return word; 
} else if (word.length() > 3) { 
    return word.substring(word.length() - 3); 
} else { 
    // whatever is appropriate in this case 
    throw new IllegalArgumentException("word has less than 3 characters!"); 
} 
+0

Potrebbe essere necessario fare attenzione con le stringhe con meno di tre caratteri, penso che gli input negativi restituiranno la stringa originale (potrebbe essere sbagliato in questo senso), che può essere o non essere accettabile per quello che stanno cercando di ottenere. – celestialorb

+1

@celestialorb: un indice negativo causerà un'eccezione, secondo [la documentazione] (http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#substring%28int%29). – MvG

+0

@celestialorb, Grazie per la menzione, comunque il codice iniziale della domanda deve anche gestire le eccezioni, quindi non stavo pensando a questo problema. – Egor

1

String newString = originalString.substring(originalString.length()-3);

+0

@MvG: risposta aggiornata. Sì era un errore di battitura – Cratylus

0

Il metodo getChars stringa non restituisce un valore , invece, scarica i suoi risultati nella tua matrice di buffer (o destinazione). Il parametro index descrive lo scostamento iniziale nell'array di destinazione.

Prova questo link per una descrizione più dettagliata del metodo getChars.

Sono d'accordo con gli altri su questo, penso che la sottostringa sarebbe un modo migliore per gestire ciò che stai cercando di realizzare.

0

È possibile utilizzare una stringa

String word = "onetwotwoone" 
int lenght = word.length 
String numbers = word.substring(word.length() - 3); 
+0

dovrebbe essere 'word.length()' – Shardul

3
public String getLastThree(String myString) { 
    if(myString.length() > 3) 
     return myString.substring(myString.length()-3); 
    else 
     return myString; 
} 
1

Se si desidera che il String composto gli ultimi tre caratteri, è possibile utilizzare substring(int):

String new_word = word.substring(word.length() - 3); 

Se effettivamente li vuole come array di caratteri, dovresti scrivere

char[] buffer = new char[3]; 
int length = word.length(); 
word.getChars(length - 3, length, buffer, 0); 

I primi due argomenti a getChars indicano la parte della stringa che si desidera estrarre. Il terzo argomento è l'array in cui verrà inserita quella porzione. E l'ultimo argomento fornisce la posizione nel buffer in cui inizia l'operazione.

Se la stringa ha meno di tre caratteri, si otterrà un'eccezione in entrambi i casi precedenti, quindi è possibile che si desideri verificarlo.

12

Ecco un codice stringato che fa il lavoro utilizzando espressioni regolari:

String last3 = str.replaceAll(".*?(.?.?.?)?$", "$1"); 

Questo codice restituisce fino a 3; se ce ne sono meno di 3, restituisce semplicemente la stringa.

Questo è come farlo sicurezza senza espressione regolare in una sola riga:

String last3 = str == null || str.length() < 3 ? 
    str : str.substring(str.length() - 3); 

Con il termine "sicurezza", voglio dire, senza un'eccezione se la stringa è null o inferiore a 3 caratteri (tutte le altre risposte non sono "sicure").


Il codice di cui sopra è identico a tutti gli effetti di questo codice, se si preferisce un più prolisso, ma potenzialmente più facile da leggere sotto forma:

String last3; 
if (str == null || str.length() < 3) { 
    last3 = str; 
} else { 
    last3 = str.substring(str.length() - 3); 
} 
+0

Possibile, ma abbastanza difficile da capire con il suo operatore ternario e la mancanza di parentesi. Quindi consiglierei di non farlo qui. -1. – MvG

+1

@MvG quindi questa risposta è "non utile"? (Questo è ciò che significa un voto -1). Perché l'uso della sintassi ternaria non è utile? E dove vorresti mettere le parentesi? Al contrario, penso che questa risposta sia utile, soprattutto considerando che tutti gli altri potrebbero esplodere se consegnati un input nullo o breve. – Bohemian

+0

Non utile perché credo (scusate se ho torto lì) che la maggior parte degli utenti che hanno difficoltà a estrarre una sottostringa da una determinata stringa, sarà sulla sua testa cercando di leggere il vostro codice. Il controllo della lunghezza è tutto molto fine, ma a questo livello considererei più utili le soluzioni verbose e le soluzioni criptiche sono confuse. Per quanto riguarda le parentesi: scriverò questo '... = ((... || ...)? ...: ...)'. Il ritorno a capo che hai aggiunto rende anche le cose molto migliori. – MvG

6

vorrei prendere in considerazione right metodo da StringUtils classe da Apache Commons Lang: http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#right(java.lang.String,%20int)

E 'sicuro. Non riceverai NullPointerException o StringIndexOutOfBoundsException.

Esempio utilizzo:

StringUtils.right("abcdef", 3)

Potete trovare altri esempi sotto il link qui sopra.

+0

In Android questa funzione non è presente – Pranaysharma

+2

Questa dovrebbe essere la risposta corretta! – hackingforgirls

Problemi correlati