В моей программе у меня есть строка (полученная из внешней библиотеки), которая не соответствует никакому регулярному выражению.
String content = // extract text from PDF
assertTrue(content.matches(".*")); // fails
assertTrue(content.contains("S P E C I A L")); // passes
assertTrue(content.matches("S P E C I A L")); // fails
Любая идея, что может быть неправильным? Когда я печатаю content
в stdout, он выглядит нормально.
Вот код для извлечения текста из PDF (я использую iText 5.0.1):
PdfReader reader = new PdfReader(source);
PdfTextExtractor extractor = new PdfTextExtractor(reader,
new SimpleTextExtractingPdfContentRenderListener());
return extractor.getTextFromPage(1);
По умолчанию .
не соответствует разрыву строк. Поэтому я предполагаю, что ваш content
содержит разрыв строки.
Также обратите внимание, что matches
будет соответствовать всей строке, а не только ее части: она не делает то, что contains
делает!
Некоторые примеры:
String s = "foo\nbar";
System.out.println(s.matches(".*")); // false
System.out.println(s.matches("foo")); // false
System.out.println(s.matches("foo\nbar")); // true
System.out.println(s.matches("(?s).*")); // true
(?s)
в последнем примере приведет к тому, что .
будет соответствовать разрыву строк. Таким образом, (?s).*
будет соответствовать любой строке.