日期:2014-05-17  浏览次数:20660 次

让人头疼的字符串问题求助
有这样一个字符串 str="9月:0@@@9月:9.10@@@10月:10.20@@@9月:9.20@@@10月:10.09@@@11月:11.35"
用"@@@"分隔
现在想把对应的每个月份的数值加起来。
返回一个新的字符串 newStr = "9月:18.30@@@10月:20.29@@@11月:11.35"

琢磨好一会了也没想出个解决办法来,哪位高手能帮忙搞定,万分感谢!

------解决方案--------------------
Java code
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Test {
    public static void main(String[] args) {
        String str = "9月:0@@@9月:9.10@@@10月:10.20@@@9月:9.20@@@10月:10.09@@@11月:11.35";
        String p1 = "@@@";
        String p2 = ":";
        String[] strings = str.split(p1);
        Map<String, String> map = new HashMap<String, String>();
        String[] tmpStrings ;
        for (String string : strings) {
            tmpStrings = string.split(p2);
            if (map.containsKey(tmpStrings[0])) {
                //月份后面的数字相加
                float f = Float.valueOf(map.get(tmpStrings[0])) + Float.valueOf(tmpStrings[1]);
                map.put(tmpStrings[0], new DecimalFormat("#.00").format(f));
            } else {
                map.put(tmpStrings[0], tmpStrings[1]);
            }
        }
        StringBuilder sBuilder = new StringBuilder();
        Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, String> entry = (Map.Entry<String, String>) iterator.next();
            sBuilder.append(entry.getKey() + p2 + entry.getValue() + p1);
        }
        System.out.println(sBuilder.toString());
    }
}