En Java, la méthode split() est utilisée pour diviser une chaîne en sous-chaînes en fonction d'un délimiteur spécifié. Cependant, lorsque vous tentez de diviser une chaîne sur le caractère point littéral '.', une ArrayIndexOutOfBoundsException peut être levée.
Pour illustrer ce problème, considérez le code suivant :
String filename = "D:/some folder/001.docx"; String extensionRemoved = filename.split(".")[0];
Dans le ci-dessus, l'intention est de supprimer l'extension du fichier en divisant le nom du fichier par point. Cependant, l'exécution de ce code entraînera une exception.
À l'inverse, le code suivant fonctionne correctement :
String driveLetter = filename.split("/")[0];
Cela est dû au fait que la méthode split() interprète '.' comme caractère générique, qui correspond à n'importe quel caractère de la chaîne. Pour diviser sur le point littéral, il est nécessaire de l'échapper à l'aide d'une barre oblique inverse :
String extensionRemoved = filename.split("\.")[0];
En échappant le point, nous indiquons que nous voulons diviser sur le caractère littéral, pas sur le caractère générique. Il est important de noter que le caractère barre oblique inverse est lui-même un caractère spécial dans l'expression régulière, il doit donc également être échappé à l'aide d'une autre barre oblique inverse.
De plus, lors du fractionnement sur un point, il est crucial de prendre en compte le cas limite où le nom du fichier est vide ou se compose uniquement d'un point. Si vous tentez de diviser une telle chaîne sans utiliser le paramètre limit de la méthode split(), vous risquez de rencontrer une exception ArrayIndexOutOfBoundsException. Pour éviter cela, utilisez une valeur négative pour le paramètre limit :
String extensionRemoved = filename.split("\.", -1)[0];
En définissant la limite sur une valeur négative, vous désactivez la suppression des blancs de fin du tableau résultant, garantissant ainsi que vous obtenez toujours un valide index même pour les chaînes vides ou à un seul caractère.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!