在主题中如何检查一个字符串包含另一个字符串的次数? 例如:
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库iike 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);
答案 0 :(得分:4)
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个匹配被认为是不同的,只要它们以不同的索引开始,并且可能发生重叠,我们需要一种方法来区分匹配并允许匹配的部分重叠。
诀窍是只使用搜索字符串的第一个字符,并使用look-ahead来断言搜索字符串的其余部分。这允许重叠部分重新匹配,通过删除匹配的第一个字符,我们可以计算匹配的数量。
答案 1 :(得分:2)
我认为如果您在编辑正则表达式模式的字符串中知道要查找的单词,这可能会有效。
String string = "hellohellohellohellohellohello";
Pattern pattern = Pattern.compile("hello");
Matcher matcher = pattern.matcher(string);
int count = 0;
while (matcher.find()) count++;
答案 2 :(得分:1)
答案 3 :(得分:1)
你可以这样做
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;
}
答案 4 :(得分:0)
一些快速的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
s都不为空。