Получить подстроку с n символов до и после найденной последовательности - PullRequest
0 голосов
/ 11 июня 2011

У меня есть большая строковая переменная с именем text. Я хочу иметь возможность проверить, содержит ли text указанный searchString (например, "test"), и вернуть все подстроки с windowSize символами до и после совпадений.

Пример:

String windowSize = 5;
String text = "this is only a simple test. lorem impsum testing everything.";
String searchString = "test";

В результате я хочу следующий вывод:

mple test. lor
ssum testing e

Кроме того, было бы здорово иметь различные типы вывода:

Только до:

mple 
ssum 

Только после:

. lor
ing e

Решение

Благодаря Peter Lawrey и SubmittedDenied я получил свой ответ:

String windowSize = 5;
String text = "this is only a simple test. lorem impsum testing everything.";
String searchString = "test";

int i = -1;
while((i = text.indexOf(searchString, i+1)) > -1) {
    System.out.println(text.substring(Math.max(0, i - windowSize), Math.min(i + searchString.length() + windowSize, text.length())));
}

Ответы [ 2 ]

2 голосов
/ 11 июня 2011

Вы можете найти расположение подстроки с помощью метода indexOf(string), она также вернет -1, если такой подстроки нет.

Вы хотели бы сделать что-то вроде:

String windowSize = 5;
String text = "this is only a simple test. lorem impsum testing everything.";
String searchString = "test";
int i = -1;
while((i = text.indexOf(test, i + 1)) > -1)
{
    System.out.println(text.substring(i - windowSize, i + searchString.length() + windowSize));
}

Вам, вероятно, потребуется отлавливать ошибки, например, если первое вхождение test содержит менее windowSize символов в строке.

1 голос
/ 11 июня 2011
int windowSize = 5;
String text = "this is only a simple test. lorem impsum testing everything.";
String searchString = "test"; 
Pattern pattern = new Pattern ("(.{" + windowSize + "})" + Pattern.Quote (searchString) + "(.{" + windowSize + "})");

Если вы хотите получить только до или после, используйте 1-ю или 2-ю подходящую группу.(В скобках отмечены регионы до и после.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...