我有一个名为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())));
}
答案 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个匹配组。 (主要重点标志着区域之前和之后。