Я столкнулся со следующей проблемой (упрощенной). Я написал следующее
Pattern pattern = Pattern.compile("Fig.*");
String s = readMyString();
Matcher matcher = pattern.matcher(s);
При чтении одной строки совпадение не совпало, даже если оно начиналось с "Рис. Я проследил проблему до типа изгоев в следующей части строки. Он имел значение кодовой точки 1633 из
(int) charAt(i)
но не соответствует регулярному выражению. Я думаю, что это связано с кодировкой, отличной от UTF-8, где-то во входном процессе.
Javadocs говорят:
Предопределенные классы символов, Любой символ (может или не может совпадать с терминаторами строк)
Предположительно, это не символ в строгом смысле слова, но он все еще является частью строки. Как определить эту проблему?
ОБНОВЛЕНИЕ: Это было связано с (char) 10, что было нелегко заметить. Мой диагноз выше неправильный, и все ответы ниже соответствуют заданному вопросу и полезны.