2012-09-18 128 views
0

我想獲得一個字符串:匹配找不到重疊的單詞?

String s = "This is a String!"; 

而該字符串中返回所有2字對。即:

{"this is", "is a", "a String"} 

但現在,我可以把它做的是回報:

{"this is", "a String"} 

我如何定義我的while循環,這樣我可以解釋這種缺乏疊詞的?我的代碼如下:(說真的,我很樂意與它只是返回代表它的發現......有多少串子集的int)

int count = 0; 
while(matcher.find()) { 
    count += 1; 
} 

感謝所有。

+0

你見過[這個SO問題](http://stackoverflow.com/questions/11303309/all-overlapping-substrings-matching-a-java-regex)? –

回答

3

我喜歡的兩個答案已經發布,字數統計和減去一個,但如果你只需要一個正則表達式找到重疊的匹配:

Pattern pattern = Pattern.compile('\\S+ \\S+'); 
Matcher matcher = pattern.matcher(inputString); 
int matchCount = 0; 
boolean found = matcher.find(); 
while (found) { 
    matchCount += 1; 
    // search starting after the last match began 
    found = matcher.find(matcher.start() + 1); 
} 

在現實中,你需要一點更聰明而不是簡單地加1,因爲在「部隊」上進行這樣的嘗試將匹配「他的力量」,然後「力量」。當然,這對計算單詞來說是過分的,但如果正則表達式比這更復雜,這可能會證明是有用的。

0

從i = 0運行for循環到單詞數量 - 2,然後單詞i和i + 1將組成單個雙字串。

String[] splitString = string.split(" "); 
for(int i = 0; i < splitString.length - 1; i++) { 
    System.out.println(splitString[i] + " " + splitString[i+1]); 
} 

的2字串一個句子中的數量僅僅是字減去一個數。

int numOfWords = string.split(" ").length - 1; 
0

總對數=總字數 - 1

而且你已經知道如何計算單詞的總數。

0

我嘗試了一組模式。

String s = "this is a String"; 

Pattern pat = Pattern.compile("([^ ]+)()([^ ]+)"); 
Matcher mat = pat.matcher(s); 
boolean check = mat.find(); 
while(check){ 
    System.out.println(mat.group()); 
    check = matPOS.find(mat.start(3)); 
} 

從模式([^ ]+)()([^ ]+)
........................... | _______________ |
..................................組(0)
........ .................. | ([^ ]+) | < --group(1)
....................................... | () | < --group(2)
......................................... ... | ([^ ]+) | < --group(3)