功能:对帐功能
同时给你俩txt文档:BankAcount.txt和ClientAcount.txt,两份文档的内容如下:BankAcount.txt
日期:2007-05-30 总交费笔数:3 总金额:9000.00
银行交易流水帐号(GSYH000) 用户交费合同号(ConP00) 金额(2000.00元)
银行交易流水帐号(GSYH001) 用户交费合同号(ConP01) 金额(3000.00元)
银行交易流水帐号(GSYH002) 用户交费合同号(ConP02) 金额(4000.00元)
日期:2007-05-31 总交费笔数:4 总金额:14000.00
银行交易流水帐号(GSYH003) 用户交费合同号(ConP03) 金额(2000.00元)
银行交易流水帐号(GSYH004) 用户交费合同号(ConP04) 金额(3000.00元)
银行交易流水帐号(GSYH005) 用户交费合同号(ConP05) 金额(4000.00元)
银行交易流水帐号(GSYH006) 用户交费合同号(ConP06) 金额(5000.00元)
日期:2007-06-01 总交费笔数:5 总金额:20000.00
银行交易流水帐号(GSYH007) 用户交费合同号(ConP07) 金额(2000.00元)
银行交易流水帐号(GSYH008) 用户交费合同号(ConP08) 金额(3000.00元)
银行交易流水帐号(GSYH009) 用户交费合同号(ConP09) 金额(4000.00元)
银行交易流水帐号(GSYH010) 用户交费合同号(ConP10) 金额(5000.00元)
银行交易流水帐号(GSYH011) 用户交费合同号(ConP11) 金额(6000.00元)
ClientAcount.txt:
银行交易流水帐号(GSYH000) 用户交费合同号(ConP00) 金额(2000.00元) 日期:2007-05-30
银行交易流水帐号(GSYH001) 用户交费合同号(ConP01) 金额(3000.00元) 日期:2007-05-30
银行交易流水帐号(GSYH006) 用户交费合同号(ConP06) 金额(5000.00元) 日期:2007-05-30
银行交易流水帐号(GSYH003) 用户交费合同号(ConP03) 金额(2000.00元) 日期:2007-05-31
银行交易流水帐号(GSYH004) 用户交费合同号(ConP04) 金额(3000.00元) 日期:2007-05-31
银行交易流水帐号(GSYH005) 用户交费合同号(ConP12) 金额(4000.00元) 日期:2007-05-31
银行交易流水帐号(GSYH007) 用户交费合同号(ConP07) 金额(2000.00元) 日期:2007-06-01
银行交易流水帐号(GSYH008) 用户交费合同号(ConP08) 金额(5000.00元) 日期:2007-06-01
银行交易流水帐号(GSYH009) 用户交费合同号(ConP09) 金额(4000.00元) 日期:2007-06-01
银行交易流水帐号(GSYH010) 用户交费合同号(ConP10) 金额(5000.00元) 日期:2007-06-01
银行交易流水帐号(GSYH011) 用户交费合同号(ConP11) 金额(8000.00元) 日期:2007-06-01现要求对俩文档比对后生成一个新的文件,文件中包含所有对不上的条目。生成的新文件格式为:银行代码,日期,check failed
错误代码 银行记帐流水号 金额错误代码包括:
本条交易日期与清算日不符
本条交易客户端不存在
客户端多出的交易
交易金额不符
计费查询出错
解决方案 »
- 静态方法中调用内部类的问题
- 新手问题麻烦大家看看~
- 急,在线等,怎么使用js在同一页面中实现点击不同的按扭实现不同的内容
- 开发可跨平台的网游服务器
- 为什么比较时有人推荐 0==len ,要把常量放在前面,作为第一操作数
- 我想用数据流方式取url中文件中的内容,然后再发出去,请问怎么做?〉
- 怎样从applet发送byte[]到servlet?
- 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
- 请问怎么让生成的随机数不重复呢?
- jsp调用applet出异常 java.lang.NullPointerException
- TreeMap的remove(object)的问题
- 如何捕获JFrame的窗体移动事件?急~~~
想用Map对分段后的字段进行对象的保存,关键是保存的比较与匹配感觉实现起来的难度比较大,
大伙帮帮忙吧,这算法我是真没办法自己设计出来!刚毕业,进公司一个多月了,说是对我们新进员工的考察以决定是否录用,不是时间紧迫我也不会把问题抛给大家的。。谢过了!
public class ReadTxt
{
public static void main(String[] args)
{
try
{
int nLineCount = 0;//行数
File file = new File("BankAcount.txt");
BufferedReader in = new BufferedReader(new FileReader(file));
String strLine = "";
StringBuffer strBuffer = new StringBuffer(1000);
while ((strLine = in.readLine()) != null)
{
strBuffer.append(strLine);
strBuffer.append("^^");
++nLineCount;
}
//最终结果保存在strResult中,第一行在strResult[0],第一行第一列在strResult[0][0]
String[][] strResult = new String[nLineCount][];
String[] strTemp = (strBuffer.toString()).split("\\^\\^");
for (int i = 0; i<strTemp.length ; ++i)
for (int j = 0 ; j<strTemp[i].length() ; ++j)
{
strResult[i] = strTemp[i].split(" ");
}
for (int i=0 ; i<strResult.length ; ++i)
for (int j=0 ; j<strResult[i].length ; ++j)
{
strResult[i][j] = strResult[i][j].replaceAll("\"","");
System.out.println(strResult[i][j]);
}
} catch (Exception e) {e.printStackTrace();}
}
}
public class Balancer {
private java.util.Map bankMap;
private java.util.Map clientMap;
public Balancer()
{
bankMap=new java.util.HashMap();
clientMap=new java.util.HashMap();
}
/**
* 解析文件,是每条记录都形成一个Record对象存入map
* @param bankFile bankAccount.txt完整路径
* @param clientFile clientAccount.txt完整路径
* @throws IOException
*/
public void parseFile(String bankFile,String clientFile) throws IOException
{
java.io.BufferedReader bankReader=new java.io.BufferedReader(new java.io.FileReader(bankFile));
String line=bankReader.readLine();
String d="";
while(line!=null)
{
String[] fields=line.split(" ");
if(fields[0].indexOf("日期")!=-1)
d=fields[0];
else
{
bankMap.put(fields[0], new SingleRecord(fields[0],fields[1],fields[2],d));
}
line=bankReader.readLine();
}
bankReader.close();
java.io.BufferedReader clientReader=new java.io.BufferedReader(new java.io.FileReader(bankFile));
line=clientReader.readLine();
while(line!=null)
{
String[] fields=line.split(" ");
clientMap.put(fields[0], new SingleRecord(fields[0],fields[1],fields[2],fields[3]));
line=clientReader.readLine();
}
clientReader.close();
}
/**
* 比较两个map,在clientMap中依次取出每条key-record对,判断改key在bankMap中是否存在对应的record,
* 如果存在,判断这两个record是否相等,相等则从两个map中删除,如果不相等:判断哪些field不等,并形成相应的message写入到文件中
* 最后分别检查bankMap、clientMap中是否还有key-value对,如果有,形成相应的message写入到文件
*
*/
public void compare()
{
}
public static void main(String[] args)throws Exception
{
Balancer b=new Balancer();
b.parseFile("d://BankAcount.txt", "d://ClientAcount.txt");
}
}
class SingleRecord {
private String id;// 银行交易流水帐号 private String pactID;// 用户交费合同号 private String money;// 金额,可以设置成数组类型,这里简化 private String date;// 交易日期 public SingleRecord(String id,String pactID,String money,String date)
{
this.id=id;
this.pactID=pactID;
this.money=money;
this.date=date;
}
public String getDate() {
return date;
} public void setDate(String date) {
this.date = date;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getMoney() {
return money;
} public void setMoney(String money) {
this.money = money;
} public String getPactID() {
return pactID;
} public void setPactID(String pactID) {
this.pactID = pactID;
} public boolean equals(Object obj) {
if (obj instanceof SingleRecord) {
SingleRecord r = (SingleRecord) obj;
if ((id.equals(r.getId())) && (pactID.equals(r.getPactID()))
&& (money.equals(r.getMoney()))
&& (date.equals(r.getDate())))
return true;
}
return false;
}
}没有完全实现,剩下的自己写
java.util.Set clientKeySet = clientMap.keySet();
java.util.Iterator i = clientKeySet.iterator();
// 寰幆clientMap锛屽姣忔潯璁板綍杩涜鍒ゆ柇
while (i.hasNext()) {
String key = (String) i.next();
SingleRecord clientRecord = (SingleRecord) clientMap.get(key);// clientMap涓殑key瀵瑰簲鐨勮褰?
SingleRecord bankRecord = (SingleRecord) bankMap.get(key);// bankMap涓殑key瀵瑰簲鐨勮褰?
if (clientRecord.equals(bankRecord))// 涓ゆ潯璁板綍鐩哥瓑
{
clientMap.remove(key);
bankMap.remove(key);
} else if ((clientRecord != null) && (bankRecord != null))// clientMap銆乥ankMap涓垎鍒瓨鍦ㄨ鏉¤褰曪紝浣嗘槸璁板綍鍐呭涓嶄竴鏍?
{
// 鍒嗗埆鍒ゆ柇涓ゆ潯璁板綍鐨勫悇涓瓧娈?
if (!clientRecord.getPactID().equals(bankRecord.getPactID()))// 鐢ㄦ埛浜よ垂鍚堝悓鍙蜂笉涓€鑷达紝褰㈡垚璁板綍鍐欏叆鏂囦欢
{ }
if (!clientRecord.getMoney().equals(bankRecord.getMoney()))// 閲戦涓嶄竴鑷达紝褰㈡垚璁板綍鍐欏叆鏂囦欢
{ }
if (!clientRecord.getDate().equals(bankRecord.getDate()))// 鏃ユ湡涓嶄竴鑷达紝褰㈡垚璁板綍鍐欏叆鏂囦欢
{ }
clientMap.remove(key);
bankMap.remove(key);
}
}
//寰幆bankMap涓墿涓嬬殑璁板綍锛屽氨鏄痓ankMap涓瓨鍦紝鑰宑lientMap涓嶅瓨鍦ㄧ殑璁板綍
java.util.Set bankKeySet=bankMap.keySet();
i=bankKeySet.iterator();
while(i.hasNext())
{
SingleRecord r=(SingleRecord)i.next();
//鍐欐枃浠?
}
//寰幆clientMap涓墿涓嬬殑璁板綍锛屽氨鏄痗lientMap涓瓨鍦紝鑰宐ankMap涓嶅瓨鍦ㄧ殑璁板綍
clientKeySet=clientMap.keySet();
i=clientKeySet.iterator();
while(i.hasNext())
{
SingleRecord r=(SingleRecord)i.next();
//鍐欐枃浠?
}
}