2012-03-26 54 views
0

一個較大的字符串考慮以下幾點:如何找到字符串s的匹配#在java中

String s = "The The The the the the"; 

我如何才能找到的「該」字符串s中有多少實例?

s.matches("The")只是告訴我,如果至少有一個是存在的。 s.contains("The")是一樣的。

有沒有一些簡單的方法?

+1

Dupe of http://stackoverflow.com/questions/8975019/java-find-the-number-of-times-a-word-is-present-in-a-string-is-there-something – sgowd 2012-03-26 07:01:09

回答

0

給的這是一個嘗試:

String test = "The The The the the the"; 
System.out.println(test.split("The").length); 
+0

爲什麼這會返回長度+ 1?例如test.split(「blah」)。length = 1 – mix 2012-03-26 07:28:22

+1

感謝您的評論:原因在於這個調用實際上是使用提供的分隔符(我們的例子中的詞)來分割字符串,所以有分隔符+1的部分出現#1 – 2012-03-26 07:34:48

+2

我的這個固定的分裂答案。 – 2012-03-26 07:42:57

2

您可以使用indexOf(str, count)

int count = 0; 
String s = "The The The the the the"; 
String match = "The"; 
int searchStart = 0; 

while ((searchStart = s.indexOf(match, searchStart)) != -1) 
{ 
    count++; 
    searchStart+= match.length(); 
} 
+1

這就是一個醜陋的循環。 – Esko 2012-03-26 07:04:46

+0

這是一個無限循環 – 2012-03-26 07:13:16

+0

事實上,這需要在循環體中有一個'searchStart + = match.length'。 – bezmax 2012-03-26 07:16:24

0

您可以使用s.indexOf(以下簡稱 「」,指數);,如果將一些指標則增加計數指數也並使其inot一個循環,直到索引中沒有找到。

注:最初指數的值是0

-1
String s = "The The The The The sdfadsfdas"; 

List<String> list = Arrays.asList(s.split(" ")); 

Set<String> unique = new HashSet<String>(list); 
for (String key : unique) { 
    System.out.println(key + ": " + Collections.frequency(list, key)); 
} 
0

,只需拆分上的字的字符串進行計數。

String text = "the the water the the"; 
System.out.println(text.split("the", -1).length -1); 

此外,如果你正在使用Apache Commons Lang中,你可以使用從StringUtils的

String text = "the the water the the"; 
int count = StringUtils.countMatches(text, "the"); 
System.out.println("count is " + count); 

但是其計數功能不只是把那個在一個功能那是一個有點矯枉過正的:)

+0

注意-1或你將得到錯誤的結果 – 2012-03-26 07:43:38

4

正如我知道Matcher.find()方法試圖找到與該模式匹配的輸入序列的下一個子序列。這意味着你可以通過調用此方法的比賽中多次重複:

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

你應該使用Matcher.start()和Matcher.end()來檢索匹配序列。

+0

只是想發佈相同的答案。 – bezmax 2012-03-26 07:15:49

相關問題