在找到的序列之前和之后获取带有n个字符的子字符串

时间:2011-06-11 13:09:40

标签: java regex window substring

我有一个名为text的大型String变量。我希望能够检查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 个答案:

答案 0 :(得分:2)

您可以使用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 :(得分:1)

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个匹配组。 (主要重点标志着区域之前和之后。