Я использую класс Matcher Java для получения некоторых строк, теперь, когда я получаю свои совпадения, я также нахожу их индекс начала и конца индекса. Теперь, что я хочу сделать, это получить символы x предшествующих и последующих символов.Получение «контекстного» текста сопоставленной группы
Так что я просто вызвать метод подстроки на строку с {begin index minus
х}
в {end index plus
х}
, но это, кажется, немного тяжелым, на каждый матч, я должен буду петле строка для контекста.
Я хотел знать, есть ли лучший способ сделать это.
Вот что я сделал до сих пор: Та часть, которая беспокоит меня является text.substring
, как дорого это
String text = "Some 22 text with 44 characters";
Matcher matcher = Pattern.compile("\\d{2}").matcher(text);
int x = 5;
while (matcher.find()) {
String match = matcher.group();
int start = matcher.start();
int end = matcher.end();
String pretext = text.substring(start - x, start);
String postext = text.substring(end, end + x);
System.out.println(pretext + " - " + match + " - " + postext);
}
Отдается ответ с помощью группирования, чтобы решить эту проблему: с помощью regex (.{5})(\d{2}(.{5})
. Прежде всего, это не удалось бы захватить не более 5 символов. Таким образом, решение это (.{0,5})(\d{2})(.{0.5})
, очень хорошо для этого простого регулярного выражения (\d{2})
но для того, как «c?at
» и данный текст «кот» это будет соответствовать группам
- гр
- на
Показать код. Трудно ответить на вопросы, не видя, что вы на самом деле пробовали. – user2339071
является вашим 'x' фиксированным или переменным? – collapsar
Я добавил то, что я сделал, и да x - фиксированная переменная – aclokay