从字符串中查找子串的频率
Finding the frequency of substring from a string
我正在尝试查找字符串中子字符串出现的频率。
例如:
字符串是:House Dog Bat Dog House Dog Bat
结果应该是:
在第一次迭代中:
房子=2 狗=3 蝙蝠=2
在第二次迭代中:
家犬
狗蝙蝠
蝙蝠狗
狗屋
家犬
狗蝙蝠
因此 House Dog 和 Dog Bat 的频率均为 2,其他频率为 1
第三次迭代:
家犬蝙蝠
狗蝙蝠狗
蝙蝠狗屋
狗屋狗
家犬蝙蝠
狗蝙蝠
蝙蝠
只有House Dog Bat的频率是2,其他都是1。
计数过程会一直持续到特定的迭代次数吗?
必须在 IntelliJ Idea 中实现它 Android 但 Java 代码也会有所帮助。
已经在网上搜索过了。
是的,输入总是不同的,long.Input 将是 google 搜索结果源代码。狗和房子只是例子。
当前代码:
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();
}
你可以这样尝试搜索单词的重复
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));
}
}
这是我能够开发的解决方案。 Join的方法写在我的问题里
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);
}
我正在尝试查找字符串中子字符串出现的频率。 例如:
字符串是:House Dog Bat Dog House Dog Bat
结果应该是:
在第一次迭代中:
房子=2 狗=3 蝙蝠=2
在第二次迭代中: 家犬
狗蝙蝠
蝙蝠狗
狗屋
家犬
狗蝙蝠
因此 House Dog 和 Dog Bat 的频率均为 2,其他频率为 1
第三次迭代:
家犬蝙蝠
狗蝙蝠狗
蝙蝠狗屋
狗屋狗
家犬蝙蝠
狗蝙蝠
蝙蝠
只有House Dog Bat的频率是2,其他都是1。
计数过程会一直持续到特定的迭代次数吗?
必须在 IntelliJ Idea 中实现它 Android 但 Java 代码也会有所帮助。
已经在网上搜索过了。
是的,输入总是不同的,long.Input 将是 google 搜索结果源代码。狗和房子只是例子。
当前代码:
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();
}
你可以这样尝试搜索单词的重复
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));
}
}
这是我能够开发的解决方案。 Join的方法写在我的问题里
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);
}