Это потому, что .
не будет соответствовать символу новой строки. Таким образом, ваша строка, содержащая новую строку, не будет соответствовать строке, которая заканчивается на .*
. Итак, когда вы вызываете matches()
, он возвращает false, потому что новая строка не совпадает.
Второй возвращает true, потому что он находит совпадение во входной строке. Это не обязательно соответствует всей строке.
С Pattern
Javadocs :
.
Любой символ (может совпадать или не совпадать с ограничителями строки)