=======================================================================<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>合并成一条,并按格式顺序全部输出。
<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>合并成一条,并按格式顺序全部输出。
<msg><num>456</num><con>没错!我是猪</con><who>芙蓉</who><msg>
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);
}
}
}}
简陋无优化面向过程版。
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;
}
}
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;
}
}
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>
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());
}
}
//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>");
}
}
}
我是这么觉得的。
你可以吧这些数据全插入到一张表里面
然后用select语句可以直接一次性按照你要的格式查询出来的