order_file.txt是从第三方系统发送过来的订单文件,假设该文件存放在D盘根目录下,
写一个Java小程序来读取并解析这个文件。
字段说明:
currencyCode 币种代码,如:156-人民币
txnAmt 交易金额
accNo 银行卡号,卡号的前6位叫做卡BIN
bizCode 业务代码
解析输出:
1、每种币种的交易总金额
2、文件中出现了哪些不同的卡BIN
3、每种业务代码出现次数排序,从高到低。
解析结果直接打印输出即可。
文本内容如下:
orderId|currencyCode|txnAmt|accType|accNo|customerNm|bizCode|phoneNo|txnTime
0823000300003371|156|1000.10|01|537838105001428248|张三|000421|18661122345|20211217155012
0823000300003372|978|100.30|01|622254105001428248|张三|000431|18661122345|20211217155012
0823000300003373|978|500.00|02|491046105001428248|张三|000401|18661122345|20211217155012
0823000300003374|156|700.50|01|622254105001428248|张三|000402|18661122345|20211217155012
0823000300003375|840|800.10|02|622021105001428248|张三|000401|18661122345|20211217155012
0823000300003376|156|500.78|01|537838105001428248|张三|000402|18661122345|20211217155012
0823000300003377|978|0.66|01|491046105001428248|张三|000401|18661122345|20211217155012
0823000300003378|156|5.30|02|491042105001428248|张三|000411|18661122345|20211217155012
0823000300003379|978|10000.00|01|622021105001428248|张三|000401|18661122345|20211217155012
0823000300003380|840|0.10|01|537838105001428248|张三|000411|18661122345|20211217155012
0823000300003381|840|30.15|03|622254105001428248|张三|000501|18661122345|20211217155012
0823000300003382|156|1.23|01|491046105001428248|张三|000501|18661122345|20211217155012
0823000300003383|978|10.99|01|491046105001428248|张三|000411|18661122345|20211217155012
0823000300003384|156|5.18|03|491042105001428248|张三|000501|18661122345|20211217155012
0823000300003385|156|10000000.00|01|622021105001428248|张三|000401|18661122345|20211217155012
0823000300003386|840|1000.00|01|491042105001428248|张三|000421|18661122345|20211217155012
0823000300003387|978|100.36|03|622254105001428248|张三|000431|18661122345|20211217155012
0823000300003388|156|0.11|01|491042105001428248|张三|000441|18661122345|20211217155012
0823000300003389|840|99.99|01|622021105001428248|张三|000501|18661122345|20211217155012
代码处理逻辑:
先调用IO流读取文件内容,读取每一行数据后用list接收再存入二维数组中,关闭流,拿到数组后按照需求查询想要的结果;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;
public class ProcessData {
public static void main(String[] args) throws IOException {
process();
}
private static void process() throws IOException {
BufferedReader br=
new BufferedReader(new FileReader("D:\\order_file.txt"));
String line = br.readLine();
System.out.println("数据头:"+line);
String[] split = line.split("\\|");
int length = split.length;
System.out.println("每行有"+(length)+"个元素");
String str;
ArrayList<String> list = new ArrayList<>(16);
while ((str=br.readLine())!=null){
//System.out.println(str);
list.add(str);
}
int num = list.size();
System.out.println("文件有"+num+"行数据");
String[][] arr=new String[num][length];
String s="";
for (int i = 0; i < num; i++) {
s = list.get(i);
String[] strings = s.split("\\|");
for (int j = 0; j < length; j++) {
arr[i][j]=strings[j];
}
}
br.close();
//去重
Set<String> set=new HashSet<>();
for (int i = 0; i < num; i++) {
String col2 = arr[i][1];
set.add(col2);
}
System.out.println(set);
Double tradeFee=0D;
DecimalFormat format = new DecimalFormat("0.00");
for (String e:set) {
for (int i = 0; i < num; i++) {
if (e.equals(arr[i][1])) {
tradeFee += Double.valueOf(arr[i][2]);
}
}
//走完一轮循环tradeFee置为0
String fee = format.format(tradeFee);
System.out.println("币种"+e+"交易总金额:"+fee);
tradeFee=0D;
}
System.out.println("----------------------");
//业务代码统计次数
List<String> codeList=new ArrayList<>(16);
for (int i = 0; i < num; i++) {
String code = arr[i][6];
codeList.add(code);
}
//System.out.println("bizCode:"+codeList);
HashSet<String> hashSet = new HashSet(codeList);
Map<String,Integer> map=new HashMap<>();
for(String c:hashSet){
int i = Collections.frequency(codeList, c);
map.put(c,i);
}
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
// System.out.println(entrySet);
ArrayList<Map.Entry<String, Integer>> entries = new ArrayList<>(entrySet);
Collections.sort(entries,
(o1, o2) -> o2.getValue().compareTo(o1.getValue()));
System.out.println("从高到低业务代码出现次数排序结果:");
for (Map.Entry m:entries) {
System.out.println(m.getKey()+"出现"+m.getValue()+"次");
}
System.out.println("----------------------");
List<String> accList=new ArrayList<>();
for (int i = 0; i < num; i++) {
String acc = arr[i][4];
String s1 = acc.substring(0, 6);
accList.add(s1);
}
List<String> collect = accList.stream().distinct().collect(Collectors.toList());
//System.out.println(collect);
System.out.println("文件中出现了"+collect.size()+"种卡BIN,分别为:");
for (int i = 0; i <collect.size() ; i++) {
System.out.println("卡BIN-"+(i+1)+":"+collect.get(i));
}
/* System.out.println("二维数组结果如下:");
for (int i = 0; i < num; i++) {
for (int j = 0; j < length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}*/
//System.out.println(list);
}
}