iteye_9846 2008-12-09 13:42
浏览 234
已采纳

java字符串解析

源字符串 22:w,22:c,21:r,7:r,7:w,7:c,8:w,8:c,8:d,9:r,9:w,9:c,9:d,10:r

目标字符串 22:w,22:c;21:r;7:r,7:w,7:c;8:w,8:c,8:d;9:r,9:w,9:c,9:d;10:r

对于源字符串含义 22:w 代表 编号为22的国家拥有的权限为w, 想将源字符串格式为 国家编号1:权限a,权限b;国家2:权限c,权限.....

用java 解析 或正则表达式
[b]问题补充:[/b]
我的问题解决了,跟你用的方法差不多,但还是要感激回帖的人,希望有类似的问题的人不再有问题

  • 写回答

1条回答 默认 最新

  • xuxiaolei 2008-12-09 17:38
    关注

    [code="java"]
    public static void main(String[] args) {

        String source = "22:w,22:c,21:r,7:r,7:w,7:c,8:w,8:c,8:d,9:r,9:w,9:c,9:d,10:r";
        String result = parse(source);
    
        System.out.println(result);
    }
    
    public static String parse(String source) {
        List<String> list = null;
        StringBuffer buffer = new StringBuffer();
        String result = null;
        Map<String, List<String>> map = new HashMap<String, List<String>>();
    
        String[] array = source.split("\\,");
    
        for(String e : array) {
            String[] entry = e.split(":");
            String key = entry[0];
            String value = entry[1];
    
            if(map.get(key) == null) {
                list = new ArrayList<String>();
                list.add(value);
                map.put(key, list);
            } else {
                list = map.get(key);
                if(!list.contains(value)) {
                    list.add(value);
                }
            }
        }
    
        Iterator iter = map.keySet().iterator();
        while(iter.hasNext()) {
            String key = (String) iter.next();
            list = map.get(key);
            buffer.append(key + ":");
            for(int i = 0; i < list.size(); i++) {
                buffer.append(list.get(i));
                if(i != list.size() - 1) {
                    buffer.append(",");
                }
            }
    
            buffer.append(";");
        }
    
        result = buffer.toString();
    
        if(buffer.charAt(buffer.length() - 1) == ';')  {
            result = result.substring(0, result.length() - 1);
        }
    
        return result;
    }
    

    [/code]
    输出
    21:r;10:r;7:r,w,c;22:w,c;9:r,w,c,d;8:w,c,d

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件