Java:计算字符串中序列的频率
我正在编写一个简单的程序,计算序列在字符串中出现的次数 案例1: 给定字符串:EATNEATMMMMEAT 给定顺序:吃 程序应返回值3 案例2: 给定字符串:EATEAT 给定顺序:吃 程序应该返回2Java:计算字符串中序列的频率,java,arrays,string,split,count,Java,Arrays,String,Split,Count,我正在编写一个简单的程序,计算序列在字符串中出现的次数 案例1: 给定字符串:EATNEATMMMMEAT 给定顺序:吃 程序应返回值3 案例2: 给定字符串:EATEAT 给定顺序:吃 程序应该返回2 import java.util.*; public class FrequencyOfSequence { //Finds the frequency of a sequence in a string s public static void main(String[] args)
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的数组
有办法解决这个问题吗 一个选项是使用
replace()
删除匹配项并计算大小差异:
int count = (s.length() - s.replace(sequence, "").length()) / sequence.length();
如果您想使用split()
方法,如果您这样使用它,它应该可以工作:
int count = s.split(sequence, -1).length - 1;
-1
参数告诉方法不要丢弃尾随的空字符串。然后我们从长度中减去1以避免围栏柱问题。使用正则表达式:
Pattern pattern = Pattern.compile(sequence);
Matcher matcher = pattern.matcher(s);
int count = 0;
while (matcher.find())
count++;
System.out.println(count);
这里还有一个你想尝试的选项
int count=0;
if(s.endsWith(sequence)){
count=s.split(sequence).length;}
else{
count=s.split(sequence).length-1;
}
不要使用String#split,只需自己在一个循环中解析字符串。一个很好的循环ol'indexOf loop重叠匹配呢?例如,如果你在“EEE”中搜索“EE”,那是2还是3?@shmosel这是1操作,我是说1还是2。我不明白。在EATEAT returns上执行此操作6.此操作有效。但类似于我的解决方案是否可行?