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
相关产品推荐
相关产品推荐

