#java
#java
Вопрос:
мне нужно получить все файлы, заканчивающиеся на .doc
, и у меня есть некоторые пользовательские расширения, такие как .doc.25-40
, .doc2
и т.д. Мне нужно получить все расширения с .doc.*
filename.endsWith(".doc.*");
почему происходит сбой?
Комментарии:
1. Просто комментарий, чтобы сообщить вам, что все стандартные классы Java хорошо документированы, и что вы могли бы выяснить, почему это не работает, просто прочитав javadoc: download.oracle.com/javase/6/docs/api/java/lang /…
Ответ №1:
Нет, это не работает. Java не поддерживает простые подстановочные знаки. Вам пришлось бы использовать метод регулярных выражений, например:
filename.matches(".*\.doc.*")
Объяснение:
.* // any text
\. // a period
doc // "doc"
.* // any text
Комментарии:
1. @Peter этого не видел, теперь изменен
2. @Sean, добавление a b в качестве
.*\.doc\b.*
может быть улучшением, чтобы избежать сопоставленияmy.document.xls
3. @Peter верно, но это больше не будет соответствовать .doc2
4. Возможно,
.*\.doc[\-\.0-9]*
требуется или даже.*\.[dD][oO][cC][\-\.0-9]*
в случае, если это верхний регистр.5. @Peter проще встроить флаг без учета регистра, например:
.*\.(?i)doc.*
, см. Специальные конструкции
Ответ №2:
Потому что это то же самое, что
filename.contains(".doc");
Это не удается, потому что сравнение строк является буквальным, например file.ДОКУМЕНТ также завершится ошибкой.
Ответ №3:
String.EndsWith() ищет определенную последовательность символов, вы не можете использовать подстановочные знаки. То, что вы ищете, — это String.matches (регулярное выражение String), которое использует регулярные выражения.
filename.matches(".*\.doc.*")