java-处理文本文件-大量试题重排序

在win10系统下,借助idea工具,使用Java8和Hutool库对格式工整的试题文本文件进行处理,避免人工排序和追加md标题。文件包含试题中文、英文、选项、答案和解析等内容,还给出了处理代码和日志。

文本文件的内容是试题,并且格式工整,不想用人工排序并追加md的标题。当前使用idea工具,在win10系统中操作,使用java8,使用hutool进行文件读写。
格式是:
第一行 试题中文,内容开头是:序号+ 、 [
第二行 试题英文
第三行 至 答案行 选项
答案行 倒数第二行
最后一行 内容解析

待处理文件内容

1、 [单选] 试题中文...
English test questions
 A:...
 B:...
 C:...
 D:...
正确答案:A 你的答案:A
解析:....
3、 [单选] 试题中文...
English test questions
 A:...(含英文)
 B:...(含英文)
 C:...(含英文)
 D:...(含英文)
正确答案:C 你的答案:C
解析:....
2、 [多选] 试题中文...(选择两项)
English test questions...(select two)
 A:...(含英文)
 B:...(含英文)
 C:...(含英文)
 D:...(含英文)
 E:...(含英文)
 F:...(含英文)
正确答案:BF 你的答案:CF
解析:....
...

处理代码

pom.xml

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-core</artifactId>
            <version>4.6.2</version>
        </dependency>

处理代码

import cn.hutool.core.io.FileUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

/**
 * FileTest 类说明:
 *
 * @author z.y
 * @version v1.0
 * @date 2022/7/6
 */
public class FileTest {
    public static void main(String[] args) {
        String path = "F:\\记录\\考题\\练习二-含解析.txt";
        String path_new = "F:\\记录\\考题\\练习二-含解析-处理.txt";
        System.out.println(path);
        try {
            List<String> lines = FileUtil.readLines(path, "UTF-8");
            System.out.println(lines.size());
            String sp_1 = "、 [",sp_11 = "、 \\[",sp_2 = "正确答案",sp_3 = "解析:";
            Topic topic = null;
            int index = 0;
            Map<String, Topic> map = new TreeMap<>();
            for (String line : lines) {
                if( null == line || line.length() <= 0 ){ continue; }
                if(line.indexOf(sp_1) > 0 ){
                    topic = new Topic();
                    index = 0;
                    String k = line.split(sp_11)[0];
                    map.put(k,topic);
                    System.out.print(k+',');
                }
                index +=1;
                if( topic == null ){ continue; }
                if( index  == 1 ){
                    topic.info = line;
                }else if( index == 2){
                    topic.infoEn = line;
                }else if( line.startsWith(sp_2)){
                    topic.answer = line;
                    index = 99;
                }else if( line.startsWith(sp_3)){
                    topic.analysis = line;
                    index = 99;
                }else if( index > 11){
                    System.out.println("未识别["+ index +']');
                }else {
                    if(topic.options == null){
                        topic.options = new ArrayList<>();
                    }
                    topic.options.add(line);
                }
            }
            System.out.println("<>");
            System.out.println(map.size());
            System.out.println("<>");
            List<String> newList = new ArrayList<>(lines.size() +18);
            for (int i = 1,l = map.size(); i <= l; i++) {
                if(i%10==1){
                    newList.add("## " + i + '-' + (i + 9));
                    System.out.println("## " + i + '-' + (i + 9));
                }
                if(null != ( topic = map.get(i+""))){
                    System.out.println(i + "\t" + topic.info.substring(0,10) + "\t" + topic.answer);
                    newList.add(topic.info);
                    newList.add(topic.infoEn);
                    newList.addAll(topic.options);
                    newList.add(topic.answer);
                    newList.add(topic.analysis);
                    newList.add("");
                }
            }
            System.out.println(newList.size());
            FileUtil.writeLines(newList,path_new,"UTF-8");
            System.out.println("end");
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /** 题 */
    public static class Topic{
        /** 题-中文 */
        String info;
        /** 题-英文 */
        String infoEn;
        /** 选项 */
        List<String> options;
        /** 答案 */
        String answer;
        /** 解析 */
        String analysis;
    }
}

日志

F:\记录\考题\练习二-含解析.txt
1440
1,3,2...<>
180
<>
## 1-10
1	1、 [单选] 在项	正确答案:A 你的答案:A
2	2、 [单选] 在项	正确答案:BF 你的答案:CF
3	3、 [单选] 在项	正确答案:C 你的答案:C
...略
## 11-20
11	11、 [单选] 项	正确答案:A 你的答案:A
...略
1638
end

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值