Я пытаюсь получить «тизер» данной строки и поместить ее как значение в HashMap. С «тизером» я подразумеваю подстроку (макс. Длина 50 символов), заканчивающую границу слова.Java-матчер не находит совпадения, хотя регулярное выражение работает отдельно
Вот пример кода, показывающий, как я пытаюсь сделать это:
import java.util.regex.*;
public class Test {
public static void main(String[] args) throws Exception {
final Pattern pattern = Pattern.compile("(^.{0,50}\b)");
final Matcher m = pattern.matcher(
"This is a long string that I want to find a shorter teaser for.");
if (m.find()) {
System.out.println("Found: " + m.group(1));
} else {
System.out.println("No match");
}
}
}
Я ожидал, что это печать:
Found: This is a long string that I want to find a
Но вместо этого она печатает:
No match
Если я тестирую это регулярное выражение отдельно, он делает то, что ему нужно, - он находит подстроку значения, которая имеет максимальную длину 50 символов и nd заканчивается на границе слова. Но если я его отлаживаю, m.find всегда получает меня ложным.
Любые идеи, как это решить? (Я сосредоточен на получении тизера, а не на использовании Matcher.find() ;-))
Использование: 'Pattern.compile (" (^ . {0,50} \\ b) ")' – anubhava
Наряду с тем, что сказал Анубхава, объявите свой шаблон.compile вне вашего цикла. Вам не нужно создавать их каждый раз. – minion
И THX для этого тоже .. Получил это из всех циклов. – anna