Vous devez échapper le point si vous voulez diviser sur un littéral point :
String extensionRemoved = filename.split("\\.")[0];
Sinon, vous divisez sur la regex. .
ce qui signifie "tout caractère".
Notez la double barre oblique inversée nécessaire pour créer une simple barre oblique inversée dans la regex.
Vous obtenez un ArrayIndexOutOfBoundsException
parce que votre chaîne d'entrée est juste un point, c'est-à-dire "."
qui est un cas limite qui produit un tableau vide lorsqu'il est divisé sur le point ; split(regex)
supprime tous les blancs de fin de tableau du résultat, mais comme la division d'un point sur un point ne laisse que deux blancs, une fois les blancs de fin de tableau supprimés, on se retrouve avec un tableau vide.
Pour éviter de recevoir un ArrayIndexOutOfBoundsException
pour ce cas limite, utilisez la version surchargée de l'option split(regex, limit)
qui a un second paramètre qui est la taille limite du tableau résultant. Lorsque limit
es négatif le comportement consistant à supprimer les blancs de fin de tableau est désactivé :
".".split("\\.", -1) // returns an array of two blanks, ie ["", ""]
c'est-à-dire, lorsque filename
est juste un point "."
en appelant filename.split("\\.", -1)[0]
retournera un blanc, mais appeler filename.split("\\.")[0]
lancera un ArrayIndexOutOfBoundsException
.
7 votes
Split n'utilise pas une chaîne regex ? Dans ce cas, "." signifie n'importe quel caractère.
4 votes
...et c'est un DOUBLE backslash pour délimiter.