могу ли я использовать запрос с подстановочной картой в методе endswith в java

#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.*")