Scanner输入下判断单词先后的代码为何无法正常输出全部结果?
解决Scanner输入仅输出首个单词顺序的问题
最近我在实现一个基于子串出现顺序逻辑的单词先后判断功能时,踩了个小坑:直接用硬编码的字符串测试时,程序能完美输出所有单词的顺序,但换成用Scanner接收用户输入后,每次只能输出第一个单词的结果,第二、第三个完全没动静。
折腾了好一会儿才找到问题根源——我误用了Scanner的next()方法,而不是应该用的nextLine()!
为什么会出现这个问题?
next()方法的特性是以空白符(空格、换行、制表符等)作为分隔符,它只会读取到第一个空白符就停止,也就是说如果用户输入的是一整句包含多个单词的内容,next()只会把第一个单词拿出来,剩下的内容都留在输入缓冲区里,后续的判断逻辑自然拿不到完整的输入,也就没法处理后面的单词了。- 而
nextLine()是读取一整行的全部内容,直到遇到换行符才停止,这样就能获取到用户输入的完整句子,后续的单词顺序判断逻辑才能正常处理所有单词。
代码示例对比
错误写法(仅读取首个单词):
Scanner scanner = new Scanner(System.in); String inputContent = scanner.next(); // 只读取到第一个空白符前的内容 // 单词顺序判断逻辑...
正确写法(读取整行内容):
Scanner scanner = new Scanner(System.in); String inputContent = scanner.nextLine(); // 获取完整的一行输入 // 单词顺序判断逻辑...
改完之后,程序就能正常输出所有单词的顺序啦!
内容的提问来源于stack exchange,提问作者alison
相关产品推荐
相关产品推荐

