Java 算法题输入输出笔记

Java 算法题输入输出笔记
一、Scanner 核心输入方法Scanner 是算法笔试入门首选适配中小数据量场景核心读取方法差异如下方法读取内容终止分隔符换行符处理next()连续字符串空格、制表符、回车不读取残留在输入缓冲区nextInt()int 型整数空格、制表符、回车不读取残留在输入缓冲区nextLine()整行完整字符串仅回车换行符读取并丢弃换行符经典踩坑换行符残留问题现象调用nextInt()/next()后立即调用nextLine()会读到空字符串。原因nextInt()只读取数字本身输入时按下的回车符\n会留在缓冲区nextLine()遇到回车直接结束因此读取到空行。解决方案int n sc.nextInt(); sc.nextLine(); // 吸收缓冲区残留的换行符 String line sc.nextLine(); // 正常读取整行内容最佳实践输入格式复杂时推荐全程使用nextLine()读行再手动分割解析从根源避免换行冲突。二、高频输入场景模板1. 输入不定长整数数组适用于输入格式如1,3,5,7,9的场景String input sc.nextLine(); String[] inputs input.split(,); int[] nums new int[inputs.length]; for (int i 0; i inputs.length; i) { nums[i] Integer.parseInt(inputs[i]); }2. 输入固定长度数组先读长度再读元素题目第一行给数组长度 n第二行给 n 个数字int n sc.nextInt(); int[] nums new int[n]; for (int i 0; i n; i) { nums[i] sc.nextInt(); }3. 多组测试用例 / 未知行数读到 EOF 结束适用于未告知输入组数、读到文件末尾结束的场景// 按元素读取 while (sc.hasNext()) { int a sc.nextInt(); int b sc.nextInt(); System.out.println(a b); } // 按行读取 while (sc.hasNextLine()) { String line sc.nextLine(); // 逐行处理逻辑 }三、常用输出方式1. 数组格式化输出用toString打印数组内容避免输出数组对象地址// 一维数组打印输出格式[1, 2, 3] System.out.println(Arrays.toString(res)); // 二维数组打印 System.out.println(Arrays.deepToString(matrix));2. 自定义格式输出// 空格分隔输出无末尾多余空格 StringJoiner sj new StringJoiner( ); for (int num : res) { sj.add(String.valueOf(num)); } System.out.println(sj);4. 大量输出优化循环中频繁调用System.out.println性能差推荐用StringBuilder拼接后一次性输出StringBuilder sb new StringBuilder(); for (int i 0; i 10000; i) { sb.append(i).append(\n); } System.out.print(sb);