处理少量txt文本数据的java小程序

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);

    }



}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值