Java 从字符串中查找子字符串的频率

Java 从字符串中查找子字符串的频率,java,android,string,intellij-idea,frequency,Java,Android,String,Intellij Idea,Frequency,我试图找出子字符串在字符串中出现的频率。 例如: 字符串是:家犬蝙蝠狗屋犬蝙蝠 结果应该是: 在第一次迭代中: 房子=2只狗=3只蝙蝠=2只 在第二次迭代中: 家犬 狗蝙蝠 蝙蝠狗 狗舍 家犬 狗蝙蝠 所以家犬和狗蝙蝠的频率都是2,其他的是1 在第三次迭代中: 家养蝙蝠 狗蝙蝠狗 蝙蝠狗屋 狗屋狗 家养蝙蝠 狗蝙蝠 球棒 只有家犬蝙蝠的频率为2。其他将是1 计数过程一直持续到特定的迭代次数 必须在IntelliJ Idea Android中实现它,但Java代码也会很有帮助 我已经在网上搜索过了

我试图找出子字符串在字符串中出现的频率。 例如:

字符串是:家犬蝙蝠狗屋犬蝙蝠

结果应该是:

在第一次迭代中:

房子=2只狗=3只蝙蝠=2只

在第二次迭代中: 家犬

狗蝙蝠

蝙蝠狗

狗舍

家犬

狗蝙蝠

所以家犬和狗蝙蝠的频率都是2,其他的是1

在第三次迭代中:

家养蝙蝠

狗蝙蝠狗

蝙蝠狗屋

狗屋狗

家养蝙蝠

狗蝙蝠

球棒

只有家犬蝙蝠的频率为2。其他将是1

计数过程一直持续到特定的迭代次数

必须在IntelliJ Idea Android中实现它,但Java代码也会很有帮助

我已经在网上搜索过了

是的,输入总是不同的和长的。输入将是谷歌搜索结果的源代码。狗和房子就是一个例子

当前代码:

public static void main(String[] args) {

 Map<String, Integer> unique = new LinkedHashMap<String, Integer>();
    for (String string : "House House House Dog Dog Dog Dog".split(" ")) {
        if(unique.get(string) == null)
            unique.put(string, 1);
        else
            unique.put(string, unique.get(string) + 1);
    }
    String uniqueString = join(unique.keySet(), ", ");
    List<Integer> value = new ArrayList<Integer>(unique.values());

    System.out.println("Output = " + uniqueString);
    System.out.println("Values = " + value);

}

   public static String join(Collection<String> s, String delimiter) {
       StringBuffer buffer = new StringBuffer();
       Iterator<String> iter = s.iterator();
       while (iter.hasNext()) {
             buffer.append(iter.next());
               if (iter.hasNext()) {
               buffer.append(delimiter);
               }
       }
       return buffer.toString();
     }
publicstaticvoidmain(字符串[]args){
Map unique=新建LinkedHashMap();
for(字符串:“家犬”。拆分(“”){
if(unique.get(string)==null)
唯一。put(字符串,1);
其他的
unique.put(字符串,unique.get(字符串)+1);
}
字符串uniqueString=join(unique.keySet(),“,”);
列表值=新的ArrayList(unique.values());
System.out.println(“Output=“+uniqueString”);
System.out.println(“Values=“+value”);
}
公共静态字符串联接(集合s,字符串分隔符){
StringBuffer=新的StringBuffer();
迭代器iter=s.Iterator();
while(iter.hasNext()){
append(iter.next());
if(iter.hasNext()){
追加(分隔符);
}
}
返回buffer.toString();
}

您可以这样尝试搜索单词的重复

public static void getStringTripple(String a){      
        String s[]=a.split(" ");
        List<String> asList = Arrays.asList(s);
        Set<String> mySet = new HashSet<String>(asList);
        for(String ss: mySet){
            if(Collections.frequency(asList,ss)>=3)
                System.out.println(ss + " " +Collections.frequency(asList,ss));
        }       
    }
publicstaticvoid getStringTriple(字符串a){
字符串s[]=a.split(“”);
List asList=数组。asList;
Set mySet=newhashset(asList);
for(字符串ss:mySet){
if(收集频率(asList,ss)>=3)
System.out.println(ss+“”+Collections.frequency(asList,ss));
}       
}

这是我能够开发的解决方案。联接方法写在我的问题中

    public static void getStringTripple(String a){      
          String s[]=a.split(" ");
          List<String> asList = Arrays.asList(s);
          Map<String, Integer> unique = new LinkedHashMap<String, Integer>();
          String string="";
       for(int i=0;i<asList.size();i++){
       for(int j=i;j<s.length;j++){
           string+= asList.get(j);
         if(unique.get(string) == null)
            unique.put(string, 1);
        else
            unique.put(string, unique.get(string) + 1);
          }
       string="";
    }
    String uniqueString = join(unique.keySet(), ", ");
    List<Integer> value = new ArrayList<Integer>(unique.values());


    System.out.println("Output = " + uniqueString);
    System.out.println("Values = " + value);

}
publicstaticvoid getStringTriple(字符串a){
字符串s[]=a.split(“”);
List asList=数组。asList;
Map unique=新建LinkedHashMap();
字符串=”;

for(int i=0;我在空格字符上显示字符串。对于每个单词,递增一个变量(该单词的计数器)。我知道我必须在空格上拆分它。这是第二次迭代,等等,我遇到了问题。在edit中添加的当前代码您可能会在每次“迭代”中添加您正在搜索一个分别由一个单词组成的子字符串。在第一次迭代中,您要搜索每个单词的子字符串,在第二次迭代中,您要搜索每个单词两个单词的子字符串,依此类推。@HubertGrzeskowiak完全正确。基本上,我正在制作一个android应用程序。扫描一个产品的条形码后,我需要它的名称。因此我将被发送在google上搜索条形码,并在结果集上应用上述算法。结果集将限制在某些特定标记之间。你认为上述算法在我试图实现的目标中会起作用吗?我认为他在查找由多个单词组成的字符串的重复方面存在更多问题。