=======================================================================<msg><num>123</num><con>哈哈,</con><who>小明</who><msg>
<msg><num>123</num><con>你这个</con><who>小明</who><msg>
<msg><num>123</num><con>笨蛋</con><who>小明</who><msg>
<msg><num>456</num><con>没错!</con><who>芙蓉</who><msg>
<msg><num>456</num><con>我是猪</con><who>芙蓉</who><msg>
<msg><num>123</num><con>无奈。。</con><who>小明</who><msg>↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 要变成 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓<msg><num>123</num><con>哈哈,你这个笨蛋</con><who>小明</who><msg>
<msg><num>456</num><con>没错!我是猪</con><who>芙蓉</who><msg>
<msg><num>123</num><con>无奈。。</con><who>小明</who><msg>=====================================================================两段字符都是一行的(为了显示方便,我加了回车)
条件:把每条<msg>,具有相同<num> 和 <who>的信息内容<con>合并成一条,并按格式顺序全部输出。

解决方案 »

  1.   

    看条件不应该是这样的么?<msg><num>123</num><con>哈哈,你这个笨蛋无奈。。</con><who>小明</who><msg>
    <msg><num>456</num><con>没错!我是猪</con><who>芙蓉</who><msg>
      

  2.   

    package com.xuz.csdn.july07;import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;public class Chatroom { public static void main(String[] args) {
    List<String> message = new ArrayList<String>();
    message.add("小明:哈哈");
    message.add("小明:你这个");
    message.add("小明:笨蛋");
    message.add("芙蓉:没错");
    message.add("芙蓉:我是猪");
    message.add("小明:无奈");

    Map<String, String> map = new HashMap<String, String>();

    String first ;
    String name ;
    String msg ;
    String second;

    first = message.get(0);
    name = first.split(":")[0];
    msg = first.split(":")[1];

    map.put(name, msg);

    for (int i = 1; i < message.size(); i++) {
    first = message.get(i);
    second = first.split(":")[0];
    msg = first.split(":")[1];

    if (second.equals(name)) {
    map.put(name, map.get(name) + msg);
    } else {
    System.out.println(name + ":" + map.get(name));
    map.remove(name);
    if (map.containsKey(second)) {
    map.put(second, map.get(second) + msg);
    } else {
    map.put(second, msg);
    }
    }

    name = second;
    }

    Iterator<String> keys = map.keySet().iterator();
    while (keys.hasNext()) {
    String key = (String) keys.next();
    String last = map.get(key);
    if (msg.equals("") == false) {
    System.out.println(key + ":" + last);
    }
    }
    }}
    简陋无优化面向过程版。
      

  3.   

    import java.util.ArrayList;
    import java.util.List;
    public class GetString { /**
     * @param args
     */
    public static void main(String[] args) {
    String str = "<msg><num>123</num><con>哈哈,</con><who>小明</who><msg>" +
    "<msg><num>123</num><con>你这个</con><who>小明</who><msg>" +
    "<msg><num>123</num><con>笨蛋</con><who>小明</who><msg>" +
    "<msg><num>456</num><con>没错!</con><who>芙蓉</who><msg>" +
    "<msg><num>456</num><con>我是猪</con><who>芙蓉</who><msg>" +
    "<msg><num>123</num><con>无奈。。</con><who>小明</who><msg>";

    GetString gs = new GetString();

    List<String> list = gs.getMsg(str);
    String num = null;
    String con = null;
    String who = null;
    String result = "";
    for(int i=0; i<list.size(); i++) {
    String s = list.get(i);
    Data data = gs.getData(s);
    if(num == null) {
    num = data.num;
    con = data.con;
    who = data.who;
    }
    if(num.equals(data.num)) {
    con = con.concat(data.con);
    } else {
    result = result + "<msg><num>"+num+"</num><con>"+con+"</con><who>"+who+"</who><msg>";
    num = data.num;
    con = data.con;
    who = data.who;
    }
    if(list.size() == i+1) {
    result = result + "<msg><num>"+num+"</num><con>"+con+"</con><who>"+who+"</who><msg>";
    }
    }
    System.out.println(result);
    } private List<String> getMsg(String str) {
    List<String> list = new ArrayList<String>();
    int indexEnd = str.indexOf("<msg>", str.indexOf("<msg>")+1);
    while(indexEnd != -1) {
    list.add(str.substring(5, indexEnd));
    str = str.substring(indexEnd+5);
    indexEnd = str.indexOf("<msg>", str.indexOf("<msg>")+1);
    }
    return list;
    }

    private Data getData(String str) {
    Data data = new Data();
    data.num = str.substring(str.indexOf("<num>")+5, str.indexOf("</num>"));
    data.con = str.substring(str.indexOf("<con>")+5, str.indexOf("</con>"));
    data.who = str.substring(str.indexOf("<who>")+5, str.indexOf("</who>"));
    return data;
    }

    class Data {
    String num;
    String con;
    String who;
    }
    }
      

  4.   


    import java.util.ArrayList;
    import java.util.List;
    public class GetString { /**
     * @param args
     */
    public static void main(String[] args) {
    String str = "<msg><num>123</num><con>哈哈,</con><who>小明</who><msg>" +
    "<msg><num>123</num><con>你这个</con><who>小明</who><msg>" +
    "<msg><num>123</num><con>笨蛋</con><who>小明</who><msg>" +
    "<msg><num>456</num><con>没错!</con><who>芙蓉</who><msg>" +
    "<msg><num>456</num><con>我是猪</con><who>芙蓉</who><msg>" +
    "<msg><num>123</num><con>无奈。。</con><who>小明</who><msg>";

    GetString gs = new GetString();

    List<String> list = gs.getMsg(str);
    String num = null;
    String con = null;
    String who = null;
    String result = "";
    for(int i=0; i<list.size(); i++) {
    String s = list.get(i);
    Data data = gs.getData(s);
    if(num == null) {
    num = data.num;
    con = data.con;
    who = data.who;
    }
    if(num.equals(data.num)) {
    con = con.concat(data.con);
    } else {
    result = result + "<msg><num>"+num+"</num><con>"+con+"</con><who>"+who+"</who><msg>";
    num = data.num;
    con = data.con;
    who = data.who;
    }
    if(list.size() == i+1) {
    result = result + "<msg><num>"+num+"</num><con>"+con+"</con><who>"+who+"</who><msg>";
    }
    }
    System.out.println(result);
    } private List<String> getMsg(String str) {
    List<String> list = new ArrayList<String>();
    int indexEnd = str.indexOf("<msg>", str.indexOf("<msg>")+1);
    while(indexEnd != -1) {
    list.add(str.substring(5, indexEnd));
    str = str.substring(indexEnd+5);
    indexEnd = str.indexOf("<msg>", str.indexOf("<msg>")+1);
    }
    return list;
    }

    private Data getData(String str) {
    Data data = new Data();
    data.num = str.substring(str.indexOf("<num>")+5, str.indexOf("</num>"));
    data.con = str.substring(str.indexOf("<con>")+5, str.indexOf("</con>"));
    data.who = str.substring(str.indexOf("<who>")+5, str.indexOf("</who>"));
    return data;
    }

    class Data {
    String num;
    String con;
    String who;
    }
    }
      

  5.   

    public  class test {
       
        public static void main(String args[]) {
        
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         List<Msg> myList = new ArrayList<Msg>();
    try {
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document dom = db.parse("NewFile.xml");
    Element docEle = dom.getDocumentElement();
    NodeList nl = docEle.getElementsByTagName("msg");
    if(nl != null && nl.getLength() > 0) {
    for(int i = 0 ; i < nl.getLength();i++) {
    Element el = (Element)nl.item(i);
    Msg m = Msg.getMsg(el);
    myList.add(m);
    }
    }
    Iterator<Msg> i = myList.iterator();
    Msg m = i.next();
    while (i.hasNext()){
    Msg mm = i.next();
    if (m.getNum()== mm.getNum() && 
    m.getWho().equals(mm.getWho())){
    m.addCon(mm.getCon());
    i.remove();
    }
    else
    m = mm;
    }
    for(Msg msg : myList){
    System.out.println(msg.toXmlString());
    }
    }catch(ParserConfigurationException pce) {
    pce.printStackTrace();
    }catch(SAXException se) {
    se.printStackTrace();
    }catch(IOException ioe) {
    ioe.printStackTrace();
    }    }
        
    }
    public class Msg {
    private int num;
    private String who;
    private String con;
    public Msg(int num, String who, String con){
    this.num = num;
    this.who = who;
    this.con = con;
    }

    public int getNum() {
    return num;
    } public String getWho() {
    return who;
    } public String getCon() {
    return con;
    }
    public void addCon(String con){
    this.con = this.con + con;
    }

    public String toXmlString(){
    return "<msg><num>"+num+"</num><con>"+con+"</con><who>"+who+"</who></msg>";
    } public static Msg getMsg(Element empEl) {
    String who = getTextValue(empEl,"who");
    int num = getIntValue(empEl,"num");
    String con = getTextValue(empEl,"con");
    Msg m = new Msg(num, who, con); return m;
    }
    public static String getTextValue(Element ele, String tagName) {
    String textVal = null;
    NodeList nl = ele.getElementsByTagName(tagName);
    if(nl != null && nl.getLength() > 0) {
    Element el = (Element)nl.item(0);
    textVal = el.getFirstChild().getNodeValue();
    } return textVal;
    } public static int getIntValue(Element ele, String tagName) {
    return Integer.parseInt(getTextValue(ele,tagName));
    }
    }<?xml version="1.0" encoding="UTF-8"?>
    <msgs>
    <msg><num>123</num><con>哈哈,</con><who>小明</who></msg>
    <msg><num>123</num><con>你这个</con><who>小明</who></msg>
    <msg><num>123</num><con>笨蛋</con><who>小明</who></msg>
    <msg><num>456</num><con>没错!</con><who>芙蓉</who></msg>
    <msg><num>456</num><con>我是猪</con><who>芙蓉</who></msg>
    <msg><num>123</num><con>无奈。。</con><who>小明</who></msg>
    </msgs>
      

  6.   

    import java.util.*;public class test{
    public static void main(String arg[]) throws Exception{
    MergeMsg();
    }

    private static void MergeMsg() throws Exception{
    String originalStr = "<msg><num>123</num><con>哈哈,</con><who>小明</who><msg><msg><num>123</num><con>你这个</con><who>小明</who><msg><msg><num>123</num><con>笨蛋</con><who>小明</who><msg><msg><num>456</num><con>没错!</con><who>芙蓉</who><msg><msg><num>456</num><con>我是猪</con><who>芙蓉</who><msg><msg><num>123</num><con>无奈。。</con><who>小明</who><msg>";
    StringBuffer result = null;
    String tempStr = null;
    String[] flitStrs = null;
    Map nameMap = new HashMap();
    Map conMap = new HashMap();

    flitStrs = originalStr.split("</con><who>");
    if(flitStrs == null || flitStrs.length < 2) {
    // 如果分割后是空或者长度小于2, 说明不包含"</con><who>", 抛出异常.
    throw new Exception("非法字符串.");

    result = new StringBuffer(flitStrs[0]);
    for(int i=1; i<flitStrs.length; i++) {
    tempStr = flitStrs[i];
    // 获得name的值, 并保存.
    nameMap.put(i,tempStr.substring(0,tempStr.indexOf("<")));
    // 获得con的值, 并保存.
    conMap.put(i,tempStr.substring(tempStr.lastIndexOf(">")+1, tempStr.length()));
    }

    for(int i=1; i<nameMap.size()+1; i++) {
    // 当name相同的时候, 对con进行拼接, 不同则保持原状.
    if(nameMap.get(i).equals(nameMap.get(i+1))) {
    result.append(conMap.get(i));
    }
    else 
    {
    result.append("</con><who>");
    result.append(flitStrs[i]);
    }
    }
    System.out.println(result.toString());
    }
    }
      

  7.   


    //package com.ricky.www;/**
    <msg><num>123</num><con>哈哈,</con><who>小明</who><msg>
    <msg><num>123</num><con>你这个</con><who>小明</who><msg>
    <msg><num>123</num><con>笨蛋</con><who>小明</who><msg>
    <msg><num>456</num><con>没错!</con><who>芙蓉</who><msg>
    <msg><num>456</num><con>我是猪</con><who>芙蓉</who><msg>
    <msg><num>123</num><con>无奈。。</con><who>小明</who><msg> ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 要变成 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ <msg><num>123</num><con>哈哈,你这个笨蛋</con><who>小明</who><msg>
    <msg><num>456</num><con>没错!我是猪</con><who>芙蓉</who><msg>
    <msg><num>123</num><con>无奈。。</con><who>小明</who><msg>*/import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import java.util.LinkedList;public class Test{
    /*
    此题必须限定每条msg的格式必须为<msg><num></num><con></con><who></who><msg>,否则会遗漏
    */
    public static void main(String[] args){
    String content = "<msg><num>123</num><con>哈哈,</con><who>小明</who><msg>" +
     "<msg><num>123</num><con>你这个</con><who>小明</who><msg>" +
     "<msg><num>123</num><con>笨蛋</con><who>小明</who><msg>" +
     "<msg><num>456</num><con>没错!</con><who>芙蓉</who><msg>" +
     "<msg><num>456</num><con>我是猪</con><who>芙蓉</who><msg>" +
     //"<msg><num>456</num><con>无奈..</con><who>芙蓉</who><msg>";
                         "<msg><num>123</num><con>无奈。。</con><who>小明</who><msg>"; process(content);
    } public static void process(String content){
    String regex = "<msg><num>(\\d+)</num><con>(.*?)</con><who>(.*?)</who><msg>";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(content);
    LinkedList<String> numLink = new LinkedList<String>();
    LinkedList<String> conLink = new LinkedList<String>();
    LinkedList<String> whoLink = new LinkedList<String>();
    while(matcher.find()){
    numLink.add(matcher.group(1));
    conLink.add(matcher.group(2));
    whoLink.add(matcher.group(3));
    }

    String temp_num = numLink.remove();
    String temp_con = conLink.remove();
    String temp_who = whoLink.remove(); String result_num = null;
    String result_con = null;
    String result_who = null; LinkedList<String> result = new LinkedList<String>(); while(numLink.size() != 0){
    result_num = numLink.remove();
    result_con = conLink.remove();
    result_who = whoLink.remove(); if(result_num.equals(temp_num) && result_who.equals(temp_who)){
    temp_con += result_con;
    }else{
    //步骤 1
    result.add(temp_num);
    result.add(temp_con);
    result.add(temp_who); temp_num = result_num;
    temp_con = result_con;
    temp_who = result_who;
    }
    } /*
    这里需要在最后将temp中的内容添加到result中,否则将漏掉最后一次
    */ result.add(temp_num);
    result.add(temp_con);
    result.add(temp_who); while(result.size() != 0){
    System.out.println("<msg><num>" + result.remove() + 
    "</num><con>" + result.remove() + 
    "</con><who>" + result.remove() + 
    "</who><msg>");
    }
    }
    }
      

  8.   

    你这个是字符串处理还是 XML 处理啊
      

  9.   

    规律就是先看<num>节点,如果<mun>节点一样,那么把<mun>节点前面的<con>节点内容拼凑在一起。然后加上<who>节点.
    我是这么觉得的。
      

  10.   

    不错 不过类似于 数据库表 
    你可以吧这些数据全插入到一张表里面
    然后用select语句可以直接一次性按照你要的格式查询出来的