我正在编写一个简单的程序来计算序列出现在字符串中的次数。
案例1:
给定字符串:EATNEATMMMMEAT
给定序列:EAT
程序应返回值3.
案例2:
给定字符串:EATEAT
给定序列:EAT
该程序应返回2.
import java.util.*;
public class FrequencyOfSequence { //Finds the frequency of a sequence in a string s
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
String sequence = in.nextLine();
String[] cArr = s.split(sequence);
System.out.println(cArr.length);
}
}
我的程序适用于案例1.它在第二种情况下失败,因为s.split(sequence)
同时删除了“EAT”,留下了一个大小为0的数组。
有解决方法吗?
答案 0 :(得分:4)
使用正则表达式:
Pattern pattern = Pattern.compile(sequence);
Matcher matcher = pattern.matcher(s);
int count = 0;
while (matcher.find())
count++;
System.out.println(count);
答案 1 :(得分:2)
一种选择是使用replace()
删除匹配并计算大小差异:
int count = (s.length() - s.replace(sequence, "").length()) / sequence.length();
如果你想使用split()
方法,如果你这样使用它应该会有效:
int count = s.split(sequence, -1).length - 1;
-1
参数告诉方法不要丢弃尾随的空字符串。然后我们从长度中减去1以避免fencepost问题。
答案 2 :(得分:0)
这是您想要尝试的另一个选项
int count=0;
if(s.endsWith(sequence)){
count=s.split(sequence).length;}
else{
count=s.split(sequence).length-1;
}