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 ?

  1. "#partB"
  2. "partA#"
  3. "#"
  4. ""

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
	}
}