169 votes

Java : Obtenir le dernier élément après la division

J'utilise la méthode de fractionnement des chaînes et je veux obtenir le dernier élément. La taille du tableau peut changer.

Ejemplo:

String one = "Düsseldorf - Zentrum - Günnewig Uebachs"
String two = "Düsseldorf - Madison"

Je veux diviser les chaînes ci-dessus et obtenir le dernier élément :

lastone = one.split("-")[here the last item] // <- how?
lasttwo = two.split("-")[here the last item] // <- how?

Je ne connais pas la taille des tableaux au moment de l'exécution :(

1 votes

Au lieu de cela, vous pouvez utiliser substring et indexof.

0 votes

@SurendarKannan La réponse la plus votée contient un exemple de cela, avec lastIndexOf.

311voto

Denis Bazhenov Points 2944

Ou vous pouvez utiliser lastIndexOf() sur une chaîne de caractères

String last = string.substring(string.lastIndexOf('-') + 1);

17 votes

Je pense que cette solution nécessite moins de ressources.

1 votes

Cela ne va-t-il pas jeter un IndexOutOfBoundsException si string ne contient pas '-' ?

7 votes

Non, @JaredBeck, ça ne l'est pas. Mais il renvoie la chaîne entière, ce qui peut ou non correspondre à ce que vous voulez. Il serait peut-être préférable de vérifier d'abord que le caractère que vous voulez séparer existe dans la chaîne.

203voto

Jon Skeet Points 692016

Enregistrez le tableau dans une variable locale et utilisez la fonction length pour trouver sa longueur. Soustrayez 1 pour tenir compte du fait qu'il est basé sur 0 :

String[] bits = one.split("-");
String lastOne = bits[bits.length-1];

Caveat emptor : si la chaîne originale est composée uniquement du séparateur, par exemple "-" o "---" , bits.length sera égal à 0, ce qui entraînera une exception ArrayIndexOutOfBoundsException. Exemple : https://onlinegdb.com/r1M-TJkZ8

28 votes

Sachez simplement que dans le cas où la chaîne d'entrée est vide, la deuxième instruction lèvera une exception "index out of bounds".

8 votes

Non, si vous divisez une chaîne vide, vous obtiendrez un tableau contenant un seul élément qui est la chaîne vide elle-même.

0 votes

Si la chaîne originale est composée uniquement du séparateur, par exemple "-" o "---" , bits.length sera égal à 0, ce qui entraînera une exception ArrayIndexOutOfBoundsException. Exemple : onlinegdb.com/r1M-TJkZ8

23voto

dfa Points 54490

En utilisant une méthode d'aide simple, mais générique, comme celle-ci :

public static <T> T last(T[] array) {
    return array[array.length - 1];
}

que vous pouvez réécrire :

lastone = one.split("-")[..];

comme :

lastone = last(one.split("-"));

3 votes

Une chose à faire est de protéger la méthode last() contre les tableaux vides, sinon vous pourriez obtenir une IndexOutOfBoundsException.

0 votes

@dotsid, D'un autre côté, il pourrait être préférable de lancer une ArrayIndexOutOfBoundsException plutôt que de retourner null ici, puisque vous attraperez l'erreur là où elle se produit plutôt que lorsqu'elle cause le problème.

1 votes

@dotsid, je laisserais cette responsabilité à l'appelant, cacher les exceptions d'exécution est dangereux.

16voto

Nepster Points 893
String str = "www.anywebsite.com/folder/subfolder/directory";
int index = str.lastIndexOf('/');
String lastString = str.substring(index +1);

Maintenant lastString a la valeur "directory"

3voto

Sean A.O. Harney Points 8033

Vous voulez dire que vous ne connaissez pas la taille des tableaux au moment de la compilation ? Au moment de l'exécution, elles pourraient être trouvées par la valeur de lastone.length y lastwo.length .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X