Java 在找到的序列之前和之后获取具有n个字符的子字符串
我有一个名为Java 在找到的序列之前和之后获取具有n个字符的子字符串,java,regex,window,substring,Java,Regex,Window,Substring,我有一个名为text的大字符串变量。我希望能够检查文本是否包含指定的搜索字符串(例如“test”),并在匹配之前和之后返回带有窗口大小字符的所有子字符串 例如: String windowSize = 5; String text = "this is only a simple test. lorem impsum testing everything."; String searchString = "test"; 因此,我需要以下输出: mple test. lor ssum testi
text
的大字符串变量。我希望能够检查文本
是否包含指定的搜索字符串
(例如“test”),并在匹配之前和之后返回带有窗口大小
字符的所有子字符串
例如:
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和Submitteded,我得到了答案:
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())));
}
您可以使用
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
字符串中的字符。您可以使用indexOf(string)
方法找到子字符串的位置,如果没有这样的子字符串,这也将返回-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 + "})");
您可能希望执行以下操作:
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
字符
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 + "})");
如果你想得到之前或之后,使用第一或第二组匹配。(parenthasis标记前后区域
如果您想得到before或before,请使用第一个或第二个匹配的组。(parenthasis标记before和after区域。是否必须使用正则表达式?String.indexOf()会更简单更快。您是对的,没有想到更简单的解决方案。是否必须使用正则表达式?String.indexOf()会更简单更快。你是对的,没有想到更简单的解决方案。如果你想匹配WindowsSize,那么使用以下表达式:新模式((.{,“+WindowsSize+”})”+Pattern.Quote(searchString)+“(.{,“+WindowsSize+”})”);//在WindowsSize之前加一个逗号这将只匹配一个,但是您可以添加
+
或*
来非常轻松地修复它。如果您想匹配WindowsSize,那么请使用以下表达式:新模式((.{,+WindowsSize+“})”+Pattern.Quote(searchString)+”(.{,+WindowsSize+“})”;//在窗口之前加一个逗号这将只匹配一个,但是你可以添加+
或*
来很容易地修复它。这将导致无限循环,因为text.indexOf(test)
总是返回相同的结果。啊,当然,我会编辑答案以使用indexOf(string,startindex)
-我知道我忘了什么!如果你想要text.indexOf(text,I+1)
,你还需要Math.max(0,I-windowsSize),Math.min(I+searchString.length()+windowsSize,text.length())
当匹配接近开始和/或结束时。@submitted,它必须是I+1
,或者你有另一个无限循环。;)谢谢你们。我用结果的解决方案更新了我的问题。这将导致一个无限循环,因为text.indexOf(test)
总是返回相同的结果。啊,当然,我会编辑答案,使用indexOf(string,startindex)
-我知道我忘了什么!你想要text.indexOf(text,I+1)
,您还需要Math.max(0,i-windowsSize),Math.min(i+searchString.length()+windowSize,text.length())
当匹配接近开始和/或结束时。@submitteded,它必须是i+1
,或者您有另一个无限循环。;)感谢你们两位。我用结果解决方案更新了我的问题。