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++; // 记得递增题号计数 }
关键细节说明
- TARGET_LENGTH的调整:你可以根据最长的试题长度来设置这个值,确保所有试题加上前缀后,补充点都能把长度拉到这个值,分数就会统一对齐在同一列。
- 处理超长试题:用
Math.max(dotsNeeded, 1)保证即使试题长度超过目标值,也至少会加一个点,避免分数直接跟在试题后面。 - 版本兼容:如果你的项目用的是Java 8或更低版本,就用StringBuilder循环生成点字符串,替代Java 11才支持的
String.repeat()。
这样修改后,输出的文本就会和你期望的一样,所有分数都垂直对齐啦!
内容的提问来源于stack exchange,提问作者Zaid khan




