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

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

实现步骤

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

 


目录
相关文章
|
9月前
|
安全 Java Spring
【Java用法】Java 过滤html标签获取纯文本信息
【Java用法】Java 过滤html标签获取纯文本信息
146 0
|
2月前
|
前端开发 Java
基于Java爬取微博数据(二) 正文长文本+导出数据Excel
【5月更文挑战第12天】基于Java爬取微博数据,正文长文本+导出数据Excel
|
22天前
|
XML Java 数据格式
Java用xpdf库获取pdf文件的指定范围文本内容
Java用xpdf库获取pdf文件的指定范围文本内容
24 1
|
6天前
|
存储 搜索推荐 算法
Java中的文本搜索与全文检索引擎
Java中的文本搜索与全文检索引擎
|
18天前
|
Java 程序员 Spring
“解密Java文本读取:File与MultipartFile“
“解密Java文本读取:File与MultipartFile“
10 0
|
19天前
|
Java 语音技术 Windows
一篇文章讲明白java文本转语音
一篇文章讲明白java文本转语音
|
2月前
|
Java
Java文本进度条
Java文本进度条
|
2月前
|
Java
Java 15 炫酷特性揭秘:告别拼接,迎接文本块时代
Java 15 炫酷特性揭秘:告别拼接,迎接文本块时代
22 0
|
2月前
|
算法 C++ Python
Java每日一练(20230430) 文本左右对齐、素数和、整数转英文表示
Java每日一练(20230430) 文本左右对齐、素数和、整数转英文表示
37 0
Java每日一练(20230430) 文本左右对齐、素数和、整数转英文表示
|
2月前
|
Java Maven
java获取文件编码,jsoup获取html纯文本
java获取文件编码,jsoup获取html纯文本
25 0