java 字符串包含次数_关于Java:一个字符串包含另一个的次数

本问题已经有最佳答案,请猛点这里访问。

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都不为空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值