求一个字符串中连续出现次数最多字符和次数有什么好的方法吗

比如:aaabbccccccd 这个字符串c连续出现的次数最多

	public static void main(String[] args) {
		String srcStr = "abcaabbccaaabbbcccddddaaad";
		countChar(srcStr).forEach((c, cnt) -> System.out.println(c + "---" + cnt));
		//如果只要取出现次数最大的字符和次数,再遍历一次map就行。注意一下是否存在多个字符出现次数一样就行。
	}

	public static Map<String, Integer> countChar(String srcStr) {
		//存放所有字符连续出现的最大次数
		Map<String, Integer> maxCntMap = new HashMap<>();
		//存放当前字符
		String workStr = "";
		//存放当前字符连续出现的次数
		int workCnt = 0;
		
		String[] srcList = srcStr.split("");
		for (String crt : srcList) {
			//如果遍历到的字符和上一个字符不同,重设当前字符和当前字符连续出现的次数
			if (! workStr.equals(crt)) {
				workStr = crt;
				workCnt = 0;
			}
			//当前字符连续出现的次数自增一
			workCnt++;
			//比较当前字符连续出现的次数和Map中记录的次数,决定是否更新Map中记录的次数
			if (maxCntMap.get(crt) == null || maxCntMap.get(crt) < workCnt) {
				maxCntMap.put(crt, workCnt);
			}
		}
		return maxCntMap;
	}

这样应该说很清晰了。

 

详见图片,其中使用了guava的Lists,没有guava包,还可以使用new ArrayList(strings);替换

public static void main(String[] args) {
    String str = "aaabbccccccd";
    List<String> chars = Arrays.asList(str.split(""));
    // 去重并得到重复数量
    Map<String, Long> countMap = chars.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
    // 排序获取第多的字符
    Optional optional = countMap.entrySet().stream()
        .sorted(Map.Entry.comparingByValue((o1, o2) -> o2.compareTo(o1)))
        .findFirst();
    // 省略判空 optional.isPresent()
    System.out.println(optional.get());
}
// c=6

 

str.toCharArray() 得到字符数组

int maxCount = 0, char maxChar = ''

for i的方式循环 int count = 0  如果i为1直接count++   如果大于1   chars[i-1] = chars[i]  count++

当前字符和前个字符不同时    判断count是否大于maxCount   是的话赋值maxCount,maxChar   然后count改为1