Java:计算字符串中序列的频率

时间:2017-01-27 04:10:08

标签: java arrays string split count

我正在编写一个简单的程序来计算序列出现在字符串中的次数。

案例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的数组。

有解决方法吗?

3 个答案:

答案 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;
}