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

Java中是否有类似C语言getchar()的方法?解决输入空串问题

Java Scanner读取整数后读取字符串的问题解决

问题本质

nextInt()方法只会读取输入中的整数部分,不会处理整数后面的换行符。当你输入完整数按回车后,这个换行符会留在输入缓冲区里,第一个nextLine()就会把这个空的换行符当成一个空字符串读进来,导致首个读取的字符串为空。

你的解决方案是合理的

你用trash = readVar.nextLine();来“吃掉”残留的换行符,这个做法完全正确且是Java里处理这类问题的标准方式之一,不用怀疑它的合理性。

其他可选解决方案

除了用额外的nextLine(),还有两种常用方式:

  • 用next()读取字符串:如果输入的字符串不包含空格,直接用readVar.next()代替nextLine()即可,它会自动跳过前面的空白字符(包括换行),只读取到下一个空格或换行前的内容。但如果字符串里有空格,这个方法会截断内容,不适用这类场景。
  • 用skip()跳过空白字符:读取整数后,调用readVar.skip("\\s+"),这个方法会跳过输入缓冲区里所有空白字符(包括换行、空格、制表符等),比单独用nextLine()更鲁棒,能处理用户输入整数后多按几个空格再回车的情况。

用skip()修改后的代码示例

import java.util.Scanner;

public class WayTooManyWords {
    public static void main(String[] args){
        Scanner readVar = new Scanner(System.in);
        String[] words;
        int totalWords = readVar.nextInt();   
        readVar.skip("\\s+"); // 跳过整数后的所有空白字符
        words = new String[totalWords];
        for (int i = 0; i < totalWords; i++) {
            words[i] = readVar.nextLine();
        }
        
        for (int i = 0; i < totalWords; i++) {
            if(words[i].length() > 10){
                System.out.print(words[i].charAt(0));
                System.out.print(words[i].length() - 2);
                System.out.print(words[i].charAt(words[i].length()-1));
                System.out.println();
            } else {
                System.out.println(words[i]);
            }
        }
    }
}

方案选择建议

  • 如果输入字符串不含空格,优先用next(),代码更简洁;
  • 如果需要读取带空格的整行内容,用nextLine()前清空残留换行的方式(你的原方法或skip())都是可靠的;
  • skip("\\s+")适合处理各种复杂的空白情况,通用性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:40:34