Sie müssen den Punkt escapen, wenn Sie auf einen literalen Punkt aufteilen möchten:
String extensionRemoved = filename.split("\\.")[0];
Andernfalls teilen Sie nach dem Regex .
, was "beliebiges Zeichen" bedeutet.
Beachten Sie den doppelten Backslash, der benötigt wird, um einen einzelnen Backslash im Regex zu erzeugen.
Sie erhalten eine ArrayIndexOutOfBoundsException
, weil Ihr Eingabestring nur ein Punkt ist, d.h. "."
, was einen Sonderfall darstellt, der ein leeres Array produziert, wenn auf Punkt aufgeteilt wird; split(regex)
entfernt alle führenden Leerzeichen vom Ergebnis, aber da beim Aufteilen eines Punkts auf einen Punkt nur zwei Leerzeichen bleiben, werden nach Entfernen der führenden Leerzeichen ein leeres Array übrig bleiben.
Um eine ArrayIndexOutOfBoundsException
für diesen Sonderfall zu vermeiden, verwenden Sie die überladene Version von split(regex, limit)
, die ein zweiter Parameter ist, der die Größenbegrenzung für das resultierende Array ist. Wenn limit
negativ ist, wird das Entfernen von führenden Leerzeichen aus dem resultierenden Array deaktiviert:
".".split("\\.", -1) // gibt ein Array von zwei Leerzeichen zurück, d.h. ["", ""]
d.h., wenn filename
nur ein Punkt "."
ist, wird filename.split("\\.", -1)[0]
ein Leerzeichen zurückgeben, aber filename.split("\\.")[0]
eine ArrayIndexOutOfBoundsException
werfen.