Почему этот split () не работает? - PullRequest
5 голосов
/ 31 октября 2009

Я пытаюсь получить расширение имени файла, но по какой-то причине я не могу заставить работать сплит:

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

Что я делаю не так?

Ответы [ 3 ]

21 голосов
/ 31 октября 2009

split() принимает регулярное выражение (см. split (java.lang.String) ), а не разделительную строку для разделения. Регулярное выражение "." означает «любой отдельный символ» (см. regex ), поэтому оно будет разбито на все, что не оставит ничего в вашем списке. Чтобы разделить на буквальную точку, используйте:

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

Как правило, вы можете использовать Pattern.quote(str) для получения регулярного выражения, которое буквально соответствует str. (предложено ramon )

file.getName().split(Pattern.quote("."))
5 голосов
/ 31 октября 2009

Возможно, вам следует перечитать api-doc для split (java.lang.String)

Передаваемая вами строка - регулярное выражение .

Попробуйте использовать

split("\\.")

Вам нужен двойной обратный слеш, потому что \. - недопустимый escape в Java-строке. Таким образом, вам нужно избежать обратной косой черты в javastring.

4 голосов
/ 31 октября 2009

String.split() запрашивает регулярное выражение в своем параметре, а в регулярных выражениях . будет соответствовать любому символу. Чтобы это работало, вам нужно добавить \, например:

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

Вам нужен один обратный слеш, чтобы убежать от точки, поэтому регулярное выражение знает, что вам нужна настоящая точка. Вам нужна другая обратная косая черта, чтобы избежать первой обратной косой черты, то есть, чтобы сообщить Java, что вы хотите иметь фактическую обратную косую черту внутри вашей строки.

Прочтите javadoc для String.split и регулярных выражений для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...