2011-06-11 77 views
0

我有一個名爲text的大型字符串變量。我希望能夠檢查text是否包含指定的searchString(例如「test」)並在匹配之前和之後返回包含windowSize字符的所有子字符串。在找到的序列之前和之後獲取帶有n個字符的子字符串

例子:

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()))); 
} 
+1

你必須使用正則表達式嗎?String.indexOf()會更簡單快捷。 – 2011-06-11 13:13:13

+0

你是對的,沒有想到更簡單的解決方案 – Alp 2011-06-11 13:23:59

回答

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字符轉換成字符串。

+0

這將導致一個無限循環,因爲'text.indexOf(test)'總是返回相同的結果。 – Alp 2011-06-11 13:27:10

+0

當然,我會編輯使用'indexOf(string,startindex)'的答案 - 知道我忘了一些東西! – SubmittedDenied 2011-06-11 13:28:55

+1

你想'文本.indexOf(text,i + 1)',當匹配時你還想'Math.max(0,i-windowsSize),Math.min(i + searchString.length()+ windowSize,text.length())'接近開始和/或結束 – 2011-06-11 13:30:55

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 + "})"); 

如果你想得到的只是之前或之後,使用第一或第二匹配組。 (parenthasis標記之前和之後的區域

+1

如果你想匹配最大化windowsize,然後使用這個表達式:new Pattern(「( 。{,「+ windowSize +」})「+ Pattern.Quote(searchString)+」(。{,「+ windowSize +」})「); //窗口前的逗號 – 2011-06-11 13:25:44

+1

這隻能匹配一個,但是你可以添加'+'或'*'來修復它很容易 – SubmittedDenied 2011-06-11 13:31:03

相關問題