You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java多测试用例下超长单词处理耗时异常问题排查

问题分析与解决方案

问题现象

编写的Java程序实现单词缩写逻辑:单词长度超过10时,输出首字符+中间字符数+尾字符;长度≤10则直接输出原单词。但批量执行4个测试用例时,最后一个超长单词pneumonoultramicroscopicsilicovolcanoconiosis响应时间超过30秒;单独测试该单词时却能立即输出结果。

问题原因

原代码使用Scanner.nextLine()读取每个单词,结合sc.nextInt()后的sc.nextLine()处理换行的逻辑,在批量输入场景下(尤其是包含超长文本的输入),可能触发Scanner的输入缓冲阻塞问题。nextLine()会读取整行内容,当输入行过长且前面存在未完全处理的缓冲数据时,会导致读取效率下降甚至阻塞。

修复方案

将读取单词的方式改为Scanner.next(),该方法会自动跳过所有空白字符(包括换行符),直接读取到下一个空白前的内容,完全适配单个单词的输入场景,同时可以移除多余的换行处理代码。

修改后的代码

import java.util.Scanner;

public class Main {
    public static void main(String pkt[]) {
        Scanner sc = new Scanner(System.in);
        int loopnumber = sc.nextInt();

        while (loopnumber > 0) {
            String word = sc.next();

            int length = word.length();
            int n = length - 2;

            if (length > 10) {
                System.out.println(word.charAt(0) + "" + n + "" + word.charAt(length - 1));
            } else {
                System.out.println(word);
            }
            loopnumber--;
        }
        sc.close();
    }
}

验证说明

修改后,无论是批量执行4个测试用例还是单独测试超长单词,程序都能快速处理并输出结果。next()方法避免了行读取带来的缓冲问题,同时简化了输入处理逻辑。

内容的提问来源于stack exchange,提问作者Pronay Sarker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:57:33