求助:String s="abcdecd";
比较字符,如果有相同的则打印;
eg: 有两个相同的cd则打印 2

解决方案 »

  1.   

    for exampleString s="abcdecd"; 
    Map<String, Integer> map = new HashMap<String, Integer>();
    for (int i=1; i<=s.length()/2; i++) {
        for (int j=0; j<s.length-i; j++) {
            String regex = s.substring(j, i);
            Pattern p = Pattern.compile(regex);
            Matcher m = p.match(s);
            int count = 0;
            while (m.find()) {
                count++;
            }
            map.put(regex, count);
        }
    }for (Map.Entry<String, Integer> entry : map.entrySet()) {
        System.out.printf("相同字符串[%s]有[%d]个\n", entry.getKey(), entry.getValue());
    }
      

  2.   

    也可以不用正则表达式String s="abcdecd"; 
    Map<String, Integer> map = new HashMap<String, Integer>();
    for (int i=1; i<=s.length()/2; i++) {
        for (int j=0; j<s.length-i; j++) {
            String regex = s.substring(j, i);
            int count = (s.length()-s.replaceAll(regex).length())/regex.length();
            map.put(regex, count);
        }
    }for (Map.Entry<String, Integer> entry : map.entrySet()) {
        System.out.printf("相同字符串[%s]有[%d]个\n", entry.getKey(), entry.getValue());
    }
      

  3.   

    zheng ze biao da shi ke shi ge hao dong xi 
    ni ke yi qu wen wen ni men lao shi
      

  4.   

    借用了二楼和三楼的思路,
    但 qybao 将字符串的长度除以2:s.length()/2
    这会带来问题,因为有可能后半个出现一个模式,前半个没有,但后半个出现多个,这种情况你的算法算不出来,比如:
    aaaaaaaaaabcbcimport java.io.IOException;
    import java.util.HashSet;
    import java.util.Set;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;/**
     * 
     * 双重循环,然后用正则表达式匹配每一个字串。
     * 使用set来进行排重。
     * 
     * 涉及到算法我很弱,仅供参考。
     * @author jinxfei
     *
     */
    public class Test {
    public static void main(String[] args) throws IOException {
    Set exist=new HashSet();
    String str="abcdecdafdfdacdafdafadscd";
    int len=str.length();
    for (int i=0; i<len; i++) {
        for (int j=1; j<(len-i); j++) {
         String regex = str.substring(i, i+j);
         if (exist.contains(regex)){
         //已经计算过的不算
         continue;
         }
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(str);
            int count = 0;
            
            while (m.find()) {
                count++;
            }
            if (count>1){
            System.out.println("子串:\t"+regex+"\t共出现 "+count+" 次。");
            exist.add(regex);
            }
        }
    } }
    }
      

  5.   

    int count = (s.length()-s.replaceAll(regex).length())/regex.length();
    这句是什么意思?
      

  6.   

    参考二、三楼朋友,做了修改
        String string = str;
        Map<String,Integer> map = new TreeMap<String,Integer>();
        for(int i=0;i<string.length();i++)
    for(int j=i+1;j<=string.length();j++){
        String regex = string.substring(i,j);
        Matcher m = Pattern.compile(regex).matcher(string);
        int count=0;
        while(m.find()){
    count++;
        }
        map.put(regex, count);
    }
        for(Map.Entry<String,Integer> s : map.entrySet())
    System.out.printf("相同字符串[%s]有[%d]个\n",s.getKey(),s.getValue());
      

  7.   

    当时随手写的,确实疏忽了,
    至于Set排出重复,数据小的时候完全没必要,因为Map会覆盖掉重复的这里也漏了一点
    int count = (s.length()-s.replaceAll(regex, "").length())/regex.length();
    子串出现的次数=(字符串长度-把所有子串都去掉后的字符串的长度)/子串的长度