zoukankan      html  css  js  c++  java
  • Java 实现:统计一个字符串中连续的相同字符构成的子串

    Java 实现:统计一个字符串中连续相同字符构成的子串,

    例如字符串:010011000011100, 需要得到的子串为:00、11、0000、111、00

    以下的实现方法(JDK版本:8+),实现大致逻辑:

    1、首先通过一个递归函数根据下标获得连续相同字符的(单个)子串

    2、接下来,通过递归函数统计子串

    3、最后,输出

    若有更好的实现方法,可共同探讨。

        import java.util.*;
         
        public class TestString {
         
            public static void main(String... args) throws Exception {
         
                String str = "010011000011100";
                List<String> list = getSubs(str, 0);
                list.stream().forEach(s -> System.err.println(s));
            }
         
            /**
             * 统计连续相同字符的子串
             * @param str
             * @param idx
             * @return
             */
            public static List<String> getSubs(String str, int idx) {
                List<String> result = new ArrayList<>();
                if(str != null) {
                    int len = str.length();
                    if(len > 0) {
                        String sub = subStr(str, idx);
                        System.err.println("sub => " + sub);
                        int tLen = sub.length();
                        if(tLen > 1) {
                            result.add(sub);
                        }
                        if(idx < len - 1) {
                            int endIdx = idx + tLen;
                            if(endIdx < len - 1) {
                                result.addAll(getSubs(str, endIdx));
                            }
                        }
                    }
                }
                return result;
            }
         
            /**
             * 获取连续相同字符子串
             * @param str
             * @param idx
             * @return
             */
            public static String subStr(String str, int idx) {
                char c = str.charAt(idx);
                StringBuffer result = new StringBuffer();
                result.append(c);
                if(idx < str.length() -1) {
                    if(c == str.charAt(idx + 1)) {
                        result.append(subStr(str, idx + 1));
                    }
                }
                return result.toString();
            }
        }


  • 相关阅读:
    如何手动编译运行带包 java 程序
    java计算时间差 Java问题通用解决代码
    Java除法结果带小数、进一法的实现 Java问题通用解决代码
    java中按字节获得字符串长度的两种方法 Java问题通用解决代码
    java精确除法计算,四舍五入 Java问题通用解决代码
    java 根据生日计算年龄 Java问题通用解决代码
    java统计中英文字数 Java问题通用解决代码
    java 实现新浪微博内容计数器 Java问题通用解决代码
    java代理ip有效检测
    java 实现统计某段文字在内容中出现的次数
  • 原文地址:https://www.cnblogs.com/interdrp/p/12664320.html
Copyright © 2011-2022 走看看