5 Stimmen

Warum schlägt dieses split() fehl?

Ich versuche, die Erweiterung eines Dateinamens zu erhalten, aber aus irgendeinem Grund kann ich Split nicht zum Laufen bringen:

System.out.println(file.getName()); //gNVkN.png
System.out.println(file.getName().split(".").length); //0

Was mache ich falsch?

22voto

Ramon Punkte 7870

split() nimmt einen regulären Ausdruck (siehe split(java.lang.String) ), nicht eine Trennzeichenfolge, durch die getrennt wird. Der reguläre Ausdruck "." bedeutet "jedes einzelne Zeichen" (siehe regex ), so dass es sich auf alles aufteilt und nichts in der Liste übrig bleibt. Um einen wörtlichen Punkt aufzuteilen, verwenden Sie:

file.getName().split("\\.")// \. escapes . in regex \\ escapes \ in Java.String

Im Allgemeinen können Sie Folgendes verwenden Pattern.quote(str) um einen regulären Ausdruck zu erhalten, der auf str wörtlich. (vorgeschlagen von ramon )

file.getName().split(Pattern.quote("."))

5voto

jitter Punkte 52721

Vielleicht sollten Sie noch einmal die Api-Doku für split(java.lang.String)

Die Zeichenkette, die Sie übergeben, ist eine regex .

Versuchen Sie es mit

split("\\.")

Sie brauchen den doppelten Backslash, weil \. ist ein ungültiger Escape in einer Java-Zeichenfolge. Sie müssen also den Backslash selbst im Javastring entschlüsseln.

4voto

jqno Punkte 14613

String.split() fragt nach einem regulären Ausdruck in seinem Parameter und in regulären Ausdrücken, . passt auf jedes Zeichen. Damit es funktioniert, müssen Sie ein \ etwa so:

System.out.println(file.getName().split("\\.").length);

Sie brauchen einen Backslash, um den Punkt zu entschlüsseln, damit der Regex weiß, dass Sie einen echten Punkt wollen. Den anderen Backslash brauchen Sie, um den ersten Backslash zu escapen, d.h. um Java mitzuteilen, dass Sie einen echten Backslash in Ihrer Zeichenkette haben wollen.

Lesen Sie die Javadoc für String.split y reguläre Ausdrücke für weitere Informationen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X