Subtilité de String.split
Par Cédric Tabin le mercredi 08.10.2008, 08:00 - Java - Lien permanent
C'est incroyable comme certaines méthodes, pourtant très souvent utilisées, arrivent encore à surprendre le développeur ! C'est le cas de la méthode split...
Un petit bout de code très simple :
public class Test { public static void main(String[] args) { String t = "partA#partB"; String[] a = t.split("#"); System.out.println(a.length); } }
C'est assez logique, cela va créer un tableau de deux cellules avec 'partA' et 'partB', le code affichera donc '2'. Maintenant qu'en est-il des chaînes de caractères suivantes ?
- "#partB"
- "partA#"
- "#"
- ""
Le plus facile d'abord, la chaîne "#partB" sera splittée de la même manière que dans l'exemple, le code affichera donc également '2'.
Les 3 cas suivants sont un peu plus sournois : après lecture de la doc, il s'avère que la méthode split enlève automatiquement toute chaîne vide en fin de tableau. Cela signifie que pour la chaîne "partA#", le dernier élément sera supprimé et le code nous retournera '1' ! Par le même effet, la chaîne "#" retournera '0' car le tableau ne contiendra que des éléments vides...
Par contre, ce qui est drôle, pour la chaîne vide, la valeur retournée sera '1' !
Il existe une façon de modifier ce comportement est d'éviter la suppression d'éléments vides en fin de tableau : la méthode split peut prendre un deuxième paramètre auquel il suffit de mettre une valeur négative pour éviter ce genre de fioritures :
public class Test { public static void main(String[] args) { String t = "#"; String[] a = t.split("#", -1); System.out.println(a.length); // 2 } }