Java 从字符串中查找子字符串的频率
我试图找出子字符串在字符串中出现的频率。 例如: 字符串是:家犬蝙蝠狗屋犬蝙蝠 结果应该是: 在第一次迭代中: 房子=2只狗=3只蝙蝠=2只 在第二次迭代中: 家犬 狗蝙蝠 蝙蝠狗 狗舍 家犬 狗蝙蝠 所以家犬和狗蝙蝠的频率都是2,其他的是1 在第三次迭代中: 家养蝙蝠 狗蝙蝠狗 蝙蝠狗屋 狗屋狗 家养蝙蝠 狗蝙蝠 球棒 只有家犬蝙蝠的频率为2。其他将是1 计数过程一直持续到特定的迭代次数 必须在IntelliJ Idea Android中实现它,但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代码也会很有帮助 我已经在网上搜索过了
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上搜索条形码,并在结果集上应用上述算法。结果集将限制在某些特定标记之间。你认为上述算法在我试图实现的目标中会起作用吗?我认为他在查找由多个单词组成的字符串的重复方面存在更多问题。