You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java从MySQL读取试题与分数,实现文本文件分数垂直对齐

解决试题与分数垂直对齐的问题

我来帮你搞定这个文本对齐的麻烦!用固定数量的制表符\t之所以达不到预期,是因为制表符是按预设间隔跳格的——当试题长度不一样时,跳格后的位置自然就乱了。想要让分数稳稳地垂直对齐,我们可以通过固定试题前缀+试题内容的总长度,补充足够的点填充空白的方式实现。

具体解决方案

核心思路是:先设定一个目标总长度(比如包含题号前缀的试题部分要占满40个字符位置),计算当前试题内容的实际长度,用目标长度减去实际长度得到需要补充的点的数量,最后把试题、补充的点、分数拼接起来写入文件。

修改后的代码示例

int count = 1; // 假设count从1开始计数
final int TARGET_LENGTH = 40; // 可根据实际需求调整这个值

while(myRs.next()) { 
    String question = myRs.getString("question"); 
    String marks = myRs.getString("questionMarks"); 
    // 拼接题号前缀,和你控制台输出的格式保持一致
    String questionWithPrefix = "Q" + count + ". " + question;
    
    // 计算需要补充的点的数量,避免负数(如果试题过长,至少加1个点)
    int dotsNeeded = TARGET_LENGTH - questionWithPrefix.length();
    dotsNeeded = Math.max(dotsNeeded, 1);
    
    // 生成点字符串(Java 11+ 可用String.repeat;低版本用StringBuilder)
    String dots;
    if (dotsNeeded > 0) {
        // Java 11+ 写法
        dots = ".".repeat(dotsNeeded);
        // Java 8及以下写法(取消注释使用)
        // StringBuilder dotsBuilder = new StringBuilder();
        // for (int i = 0; i < dotsNeeded; i++) {
        //     dotsBuilder.append(".");
        // }
        // dots = dotsBuilder.toString();
    } else {
        dots = ".";
    }
    
    try { 
        // 拼接成对齐的行写入文件
        file.write(questionWithPrefix + dots + marks + "\n");
    } catch(Exception exe) { 
        System.out.println(exe); 
    } 
    System.out.println(questionWithPrefix);
    count++; // 记得递增题号计数
}

关键细节说明

  1. TARGET_LENGTH的调整:你可以根据最长的试题长度来设置这个值,确保所有试题加上前缀后,补充点都能把长度拉到这个值,分数就会统一对齐在同一列。
  2. 处理超长试题:用Math.max(dotsNeeded, 1)保证即使试题长度超过目标值,也至少会加一个点,避免分数直接跟在试题后面。
  3. 版本兼容:如果你的项目用的是Java 8或更低版本,就用StringBuilder循环生成点字符串,替代Java 11才支持的String.repeat()

这样修改后,输出的文本就会和你期望的一样,所有分数都垂直对齐啦!

内容的提问来源于stack exchange,提问作者Zaid khan

火山引擎 最新活动