Java String字符串中已有自定义分隔符,如何统计分隔符间的字符串的出现频率。

举例如下:
String="aa bb; cc dd ee; aa bb; cc dd; cc ee; cc dd ee; aa; bb; cc;"
如何统计以“;”为分隔符的每个字符串的频率,并输出。

//上面代码有问题
[code="java"]
//输入字符
String s ="aa bb; cc dd ee; aa bb; cc dd; cc ee; cc dd ee; aa; bb; cc;"

//用正则表达式来分割";" 产生N个字符串
String[] ss = s.split(";");

//统计字符串
map map = new ConcurrentHashMap();
for(String str : ss ) {
// 如果存在,就获得当前值,然后+1放入map;不存在,放入1
int value = map.get(str) == null ? 1, map.get(str) + 1;
map.put(str, value);
}
}

for(Map.Entry entry : map.entrySet) {
System.out.println(String.format("字符串是 - [%s],出现了[%n]次"), entry.getKey, entry.getValue);
}

[/code]

[code="java"]
String s ="aa bb; cc dd ee; aa bb; cc dd; cc ee; cc dd ee; aa; bb; cc;"

String[] ss = s.split(";");

map map = new ConcurrentHashMap();
for(String str : ss ) {
int value = map.get(str) == null ? 0, map.get(str) + 1;
map.put(str, 0);
}
}
[/code]

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class CountMap {
public static void main(String[] args) {
String s="aa bb; cc dd ee;aa bb; cc dd; cc ee; cc dd ee; aa; bb; cc;";
String[] arrStr=s.split(";");
Map map=new HashMap();
for (int i = 0; i < arrStr.length; i++) {
if(map.get(arrStr[i])!=null){
map.put(arrStr[i], map.get(arrStr[i])+1);
}else{
map.put(arrStr[i], 1);
}
}
for(Entry entry : map.entrySet()){
System.out.println(entry.getKey()+"->"+entry.getValue());
}
}
}[code="java"][/code]

[code="java"]import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class CountMap {
public static void main(String[] args) {
String s="aa bb; cc dd ee;aa bb; cc dd; cc ee; cc dd ee; aa; bb; cc;";
String[] arrStr=s.split(";");
Map map=new HashMap();
for (int i = 0; i < arrStr.length; i++) {
if(map.get(arrStr[i])!=null){
map.put(arrStr[i], map.get(arrStr[i])+1);
}else{
map.put(arrStr[i], 1);
}
}
for(Entry entry : map.entrySet()){
System.out.println(entry.getKey()+"->"+entry.getValue());
}
}
}[/code]

[code="java"]
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

public class CountString {
public static void main(String[] args) {
// 源字符串
String sourceStr = "aa bb; cc dd ee; aa bb; cc dd; cc ee; cc dd ee; aa; bb; cc;";

    // 分割字符串
    String[] strs = sourceStr.split(";");

    // 用户记录字符出现次数的Map对象
    Map<String, Integer> countMap = new HashMap<String, Integer>();
    // 循环记录每个字符串出现的次数
    for (String str : strs) {
        str = str.trim(); // 特别注意, 这里应该要去掉左右边的空格, 否则统计出现不正确
        countMap.put(str, countMap.containsKey(str) ? countMap.get(str) + 1 : 1);
    }

    // 打印出各字符出现的次数
    for (Entry<String, Integer> entry : countMap.entrySet()) {
        System.out.println("字符串:" + entry.getKey() + " 出现次数:" + entry.getValue());
    }
}

}
[/code]

另外,一般需要分割字符串的时候,使用commons-lang.jar包功能更为强大
[code="java"]
org.apache.commons.lang.StringUtils

StringUtils.split(str);
StringUtils.split(str, separatorChars)
StringUtils.splitByWholeSeparator(str, separator)
StringUtils.splitPreserveAllTokens(str)
StringUtils.splitPreserveAllTokens(str, separatorChars)
[/code]