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极客思维

微信扫一扫,关注公众号

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 谷歌地图 离线地图_地图谷歌高清手机版

    谷歌地图 离线地图_地图谷歌高清手机版离线地图解决方案,除了买地图数据,使用专业的ArcGIS来做外,也可以使用GMap.Net来做。关于GMap的开发教程,可以看我以前的文章:基于GMap.Net的地图解决方案使用了GMap一年了,也有了一些积累,开发了一个可以下载ArcGIS、百度、谷歌、高德、腾讯SOSO、天地图、Here等地图的地图下载器。百度和google地图加载显示如下:百度普通地图:百度混合地图:…

  • SLAM算法总结——经典SLAM算法框架总结

    SLAM算法总结——经典SLAM算法框架总结SLAM算法总结——经典SLAM算法框架总结SLAM算法总结——经典SLAM算法框架总结SLAM算法总结——经典SLAM算法框架总结从研究生接触SLAM算法到现在也有

  • python的第三方库在哪里_第三方付款情况说明

    python的第三方库在哪里_第三方付款情况说明Python第三方库说明在哪里?0.可以跳过的介绍1.找到要第三方库0.可以跳过的介绍近期开始补习各种Python的知识,看着网上大神们python用得出神入化轻舞飞扬,虽然跟着一起安装了几十个第三方库却不会怎么用,这就尴尬了,网上找了一圈没有一个明说的,遂写此文。1.找到要第三方库Pycharm途径:1.点击File———>Setting———>搜索栏关键字pr…

  • 银行家算法c语言代码运行界面,银行家算法C语言模拟程序[通俗易懂]

    银行家算法c语言代码运行界面,银行家算法C语言模拟程序[通俗易懂]银行家算法C语言模拟程序这个最简单的模拟程序,为了完成操作系统作业而做的。大家放心,绝对可以运行,呵呵!有什么不完善的地方请提出!(在计数器的运用上比较乱,希望大家看的明白)作者:luo卢丹)源程序:#include#include#includeintAvailable[10];//可使用资源向量intMax[10][10];//最大需求矩阵i…

  • gentoo install_centos7 no controller found

    gentoo install_centos7 no controller found这期笔记将是gentoo安装的最后一期了,虽然已经配置内核了,但是也要完成剩下的安装步骤,这离安装完成已经不远了,继续加油!!!如果中断了安装,请看第二期的笔记进行恢复安装,但请重新编译一次内核,否

  • Java NIO详解[通俗易懂]

    Java NIO详解[通俗易懂]JAVANIO简介NIO与IO的对比

发表回复

您的电子邮箱地址不会被公开。

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