本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Occurences of substring in a string
如在本主题中,如何检查一个字符串包含另一个字符串的次数?
例:
s1"babab"
s2"bab"
Result : 2
如果我使用Matcher,它只会识别首次出现:
String s1 = JOptionPane.showInputDialog("");
String s2 = JOptionPane.showInputDialog("");
Pattern p = Pattern.compile(s2);
Matcher m = p.matcher(s1);
int counter = 0;
while(m.find()){
System.out.println(m.group());
counter++;
}
System.out.println(counter);
我可以那样做,但是我想在下面使用Java库,例如Scanner,StringTokenizer,Matcher等:
String s1 = JOptionPane.showInputDialog("");
String s2 = JOptionPane.showInputDialog("");
String pom;
int count = 0;
for(int i = 0 ; i< s1.length() ; i++){
if(s1.charAt(i) == s2.charAt(0)){
if(i + s2.length() <= s1.length()){
pom = s1.substring(i,i+s2.length());
if(pom.equals(s2)){
count++;
}
}
}
}
System.out.println(count);
这是家庭作业吗?
从最后找到的索引开始,您可以在while循环中简单地使用String#indexOf()。
stackoverflow.com/questions/767759/
适用于lulz的一种衬管解决方案
longStr是输入字符串。 findStr是要搜索的字符串。除longStr和findStr不得为null并且findStr必须至少包含1个字符外,没有任何假设。
longStr.length() - longStr.replaceAll(Pattern.quote(findStr.substring(0,1)) +"(?=" + Pattern.quote(findStr.substring(1)) +")","").length()
由于2个匹配项只要它们从不同的索引处开始就被认为是不同的,并且可能发生重叠,因此我们需要一种区分匹配项并允许匹配的部分重叠的方法。
诀窍是仅使用搜索字符串的第一个字符,然后使用超前声明断言其余的搜索字符串。这样可以使重叠部分重新匹配,并且通过删除匹配的第一个字符,我们可以计算匹配的数量。
如何运作? 我不了解Pattern.quote方法,什么是文字正则表达式?
@ user1915933:这意味着即使字符串包含可以被识别为正则表达式的字符或序列,这些字符或序列也将被中和为普通字符。
我认为,如果您知道要在字符串中查找的单词,则可能需要编辑正则表达式。
String string ="hellohellohellohellohellohello";
Pattern pattern = Pattern.compile("hello");
Matcher matcher = pattern.matcher(string);
int count = 0;
while (matcher.find()) count++;
对于模式为bab的字符串babab,其计数为1。
您可以为" bababab"运行它并查看结果吗? 如果是两个,则模式将丢弃已经找到一个的字符串部分。 我认为它的作用是" bab-ab",所以这可能不是最适合您的选择。
也许这样做会更好(已将其测试并在记事本中编写,所以请小心:D)字符串text =" babab"; 字符串matchWord =" bab"; 字符串newWord ="; char [] chars = text.split("); 整数计数器 for(int j = 0; j
你可以这样
private int counterString(String s,String search) {
int times = 0;
int index = s.indexOf(search,0);
while(index > 0) {
index = s.indexOf(search,index+1);
++times;
}
return times;
}
Matcher类有两个方法" start"和" end",它们返回上一个匹配项的开始索引和结束索引。此外,方法查找具有一个可选参数" start",在该参数处开始搜索。
一些快速的Bruce Forte解决方案:
String someString ="bababab";
String toLookFor ="bab";
int count = 0;
for (int i = 0; i < someString.length(); i++) {
if (someString.length() - i >= toLookFor.length()) {
if (someString.substring(i, i + toLookFor.length()).equals(toLookFor) && !"".equals(toLookFor)) {
count++;
}
}
}
System.out.println(count);
打印出3。请注意,我假设String都不为空。