Java中next()和nextLine()区别及用法「建议收藏」

Java中next()和nextLine()区别及用法「建议收藏」今天在项目之余,到杭电上刷了一道题,那道题是1062题,程序本身不是难,但是在里面实现过程中,突然发现用的Scanner类进行输入的,用到了next和nextLine这两个方法,在输入过程中也遇到一些问题,接下来进行讲述自己遇到的问题,以及如何解决的杭电1062题目:TextReverseProblemDescriptionIgnatiuslike

大家好,又见面了,我是你们的朋友全栈君。

今天在项目之余,到杭电上刷了一道题,那道题是1062题,程序本身不是难,但是在里面实现过程中,突然发现用的Scanner类进行输入的,用到了next和nextLine这两个方法,在输入过程中也遇到一些问题,接下来进行讲述自己遇到的问题,以及如何解决的

 

杭电1062题目:

 

Text Reverse

Problem Description
Ignatius likes to write words in reverse way. Given a single line of text which is written by Ignatius, you should reverse all the words and then output them.
 

 

Input
The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.

Each test case contains a single line with several words. There will be at most 1000 characters in a line.
 

 

Output
For each test case, you should output the text which is processed.
 

 

Sample Input
 
3 olleh !dlrow m’I morf .udh I ekil .mca

 

 

Sample Output
 
hello world! I’m from hdu. I like acm.

Hint

Remember to use getchar() to read ‘\n’ after the interger T, then you may use gets() to read a line and process it.

 
 

大概的意思就是:

给出一个整数n,接下来输入n行字符串,然后每行字符串按照空格取每一个单词,然后将每个单词逆序输出
 
题目很简单,因此在这里直接贴代码,讲一下自己遇到的问题:
 
import java.util.Scanner;

public class Main {

	public static String reverse1(String s) {
		int length = s.length();
		if (length <= 1)
			return s;
		String left = s.substring(0, length / 2);
		String right = s.substring(length / 2, length);
		return reverse1(right) + reverse1(left);
	}

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while (in.hasNextInt()) {
			int num = in.nextInt();  // 这里进行整数输入n  标注为:1
			String str;
			in.nextLine();           // 这里开始没有加,出现了问题  标注为:2
			for (int i = 0; i < num; i++) {
				str = in.nextLine();       // 这里就是用来输入整行字符串  标注为:3
				String[] s = str.split(" ");
				for (int j = 0; j < s.length; j++) {
					if (j != s.length - 1)
					{
						String ss = reverse1(s[j]);
						System.out.print(ss + " ");
					}
					else
					{
						String ss = reverse1(s[j]);
						System.out.print(ss);
						int p = str.length() - 1;
						while (str.charAt(p) == ' ') {
							System.out.print(' ');
							p--;
						}
						System.out.println();
					}
				}
			}
		}
	}
}

在上面代码的注释处,分别标记了1,2,3点:

1、首先输入一个整数n,
2、最开始没有加上这一句,
3、最开始是str = in.next()
 
这里就出现了问题,
因为  next()  这个方法呢,你输入了一串字符串, 他只得到空格、tab键、回车的第一个字符串,比如:
hello world! 这个字符串,只得到 hello ,如果是循环的话,第二次就能得到 world!
这样的话就得不到后面要操作的事情,因此查资料后采用nextLine()这个方法,这就是你输入一行字符串,检测到回车之后就保存,比如:
hello world! 这个字符串,就得到了整个 hello world! 字符串
 
上面读取整行字符串用nextLine()即可解决,但是,又出问题了:
1、上面代码注释中,最开始没有第二个in.nextLine()这一条语句,出现了下面的第二点的问题:
2、问题:没有in.nextLine()的话,程序在debug模式下运行,发现直接先跳过第一次的str = in.nextLine();这条语句,以str = 空形式传递了值,因此,后面相当于做了一次空操作,输出了一个空行,问题在哪呢?看下面第三点:
3、查了资料,就是说,当next()、nextInt()、nextDouble()等等这些之后,你如果不再加一条in.nextLine()的话,下面如果用到了类似str = in.nextLine(); 这条语句的话,会首先读取上面next()、nextInt()、nextDouble()等等这些语句的回车作为一条默认的(为什么是这样的机制呢?还需要继续探索),因此,解决的办法看下面第四点:
4、就是在输入 next()、nextInt()、nextDouble()等等这些 之后,再用一个in.nextLine()这个来截取上面的一个回车操作,后面的nextLine()在第一次才能起作用
 
其实解释的自己不是很满意,因此希望大家一起来整理一下,百度了很多,各种copy,然后基本上千篇一律的答案,因此想总结一下,希望和大家一起总结一篇比较满意的出来~~

 

更多精彩敬请关注公众号

Java中next()和nextLine()区别及用法「建议收藏」

Java极客思维

微信扫一扫,关注公众号

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142866.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • stat函数的使用说明[通俗易懂]

    stat函数的使用说明[通俗易懂]1:stat函数取得指定文件的文件属性,文件属性存储在结构体stat里#include<sys/stat.h>intstat(constchar*pathname,structstat*statbuf);2:结构体statstructstat{dev_tst_dev;/*IDofdevicecontainingfile*/ino_tst_ino;

    2022年8月21日
    6
  • netty权威指南读书笔记——走进java nio

    netty权威指南读书笔记——走进java nio一、linux网络IO模型:linux将所有外部设备都当作文件处理,对一个文件的读写操作通过调用内核命令执行,返回一个filedescriptor(fd文件描述符),而对于一个socket也有对应的socketFD,描述符是一个数字,指向内核中的一个结构体(文件路径,数据区属性等)。1、unix提供了5种I/O模型:a、阻塞I/O模型(默认模型):应用进程调用recvfrom后,系统调…

    2022年10月2日
    0
  • java前端开发自动生成器_一个简单实用的java代码生成器

    java前端开发自动生成器_一个简单实用的java代码生成器做现在这破项目boss还觉得进度慢,时间其实都浪费在了基础的CRUD上了,一个上午好不容易调通从action到service在到dao在到数据库的crud。工欲善其事必先利其器,有一款趁手的工具可有效提高开发效率,推荐一个简单实用的在线java代码生成器。代码生成器只是xjr快速开发框架功能的一部分。这款代码生成器是一款国内最新自主研发的JAVA代码自动生成器,目前来看这是一款十分赞的代码…

    2022年5月23日
    40
  • rsync服务的三种模式测试[通俗易懂]

    rsync服务的三种模式测试[通俗易懂]目录1什么是rsync1.1rsync简介rsync特性1.3rsync的企业工作场景说明2rsync三种模式:2.1rsync常用参数选项2.2rsync本地模式2.3rsyncshell模式2.4rsyncdaemon模式3rsync服务故障模拟4rsync多模块实战5rsync排除及无差异同步实战6rsync优缺点6….

    2022年10月13日
    0
  • eclipse方法自动注释_eclipse快速补全

    eclipse方法自动注释_eclipse快速补全1、Eclipse自动补全功能设置,默认是键入“.”才会有代码提示,否则就只有按“Alt+/”组合键。通过下面的设置可以按照你自己的需求显示代码提示。1)、直接设置打开Eclipse->Window->Perferences->Java->Editor->ContentAssist,右边出现的选项中,有一个AutoactivationtriggersorforJava

    2022年10月9日
    0
  • pycharm清除缓存「建议收藏」

    pycharm清除缓存「建议收藏」在增加缓存无果后,直接选择清除pycharm缓存。链接地址

    2022年8月25日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号