Java:从文本中随机提取不重复的某几行

本文介绍了一种从文本文件中随机抽取指定数量行的方法,通过读取文件到List集合,然后随机选择不重复的行,最后将结果写入到输出文件。

实现步骤

  1. 【第一步】 读取文本每行,转换为List集合
  2. 【第二步】 根据提取数量,随机选取不重复的几行数据
  3. 【第三步】 提取结果

代码实现

/**
     * @Title: 提取文本
     * @MethodName:  abstractTxt
     * @param txt
     * @param abstractNum
     * @Return void
     * @Exception
     * @Description:
     *
     * @author: 王延飞
     * @date:  2019/10/5 21:47
     */
    public static void abstractTxt(String txt,int abstractNum) throws Exception{
        // 【第一步】文本每行,转换为List集合
        //新建一个字符缓冲输入流对象,将基本字符输入流作为其参数,将e.txt文件作为基本字符输入流参数,其为需要读取的文本文件
        BufferedReader br = new BufferedReader(new FileReader(txt));
        //定义字符串变量str
        String str;
        //新建一个ArrayList集合,用其父类给ls集合定义数据类型
        List<String> list = new ArrayList<String>();
        //将br输入流对象赋值给字符串变量,判断其是否为空
        while((str=br.readLine())!=null) {
            //若不为空,则将字符串str添加至集合ls中
            list.add(str);
        }

        // 【第二步】 根据提取数量,随机选取不重复的几行数据
        //文本数量
        int n = list.size();
        System.out.println("文本数量"+n);
        // 文本的行号-1
        int[] numbers = new int[n];
        for(int i = 0; i<numbers.length; i++){
            numbers[i] =i;
        }

        // 提取数量,构建随机不重复的数
        int[] result = new int[abstractNum];
        for (int i = 0; i < result.length; i++) {
            int r = (int)(Math.random() * n);
            result[i] = numbers[r];
            /*防止重复,去掉已经提取过的*/
            numbers[r] = numbers[n-1];
            n--;
        }

        // 【第三步】 提取结果
        //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("../../user/output.txt")),"utf-8"));
        BufferedWriter bw = new BufferedWriter(new FileWriter(new File("D:\\user\\output.txt")));
        for(int i:result){
            System.out.println("坐标:"+i);
            String string = list.get(i);
            bw.write(string);
            bw.newLine();
        }
        bw.flush();
        bw.close();
        //关闭字符缓冲输入流
        br.close();
    }

    public static void main(String[] args) throws Exception {
        abstractTxt("D:\\user\\input.txt", 10);
    }    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萤火AI百宝箱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值