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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • bwapp 06

    bwapp 06文章目录Base64Encoding(Secret)ClearTextHTTP(Credentials)HostHeaderAttack(ResetPoisoning)HTML5WebStorage(Secret)SSL2.0DeprecatedProtocolTextFiles(Accounts)Base64Encoding(Secret)抓包,找到sercret,进行base64编码以上级别,40位16进制数,推测使用了sha1编码注意先解码,再base

    2022年9月23日
    0
  • sqlserver 视图创建索引_Oracle创建索引

    sqlserver 视图创建索引_Oracle创建索引一、索引1、添加索引createindex索引对象名on索引对应表名(表内索引对象字段名);例:需创建包含userid属性的userinfo表。createindexuseridonsystem.userinfo(userid);2、删除索引dropindex索引对象名;例:dropindexuserid;二、视图(并不是真实存在的一张表)1、创建视图createview视图名(学号,姓名,科目,成绩)asselect对应在表格中的字段名from涉

    2022年9月7日
    0
  • 定时备份数据库的存储过程.sql

    定时备份数据库的存储过程.sql

    2021年4月25日
    138
  • python3 基础 廖雪峰教程笔记-1

    python3 基础 廖雪峰教程笔记-1廖雪峰教程文档:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143252

    2022年7月6日
    16
  • 解决keil注册机在win10无法打开问题[通俗易懂]

    解决keil注册机在win10无法打开问题[通俗易懂]解决keil注册机在win10无法打开问题刚开始笔者先以管理员模式打开,无效,弹出一个弹窗说为病毒文件以下提供一种解决办法,亲测有效就是安全模式里打开注册机详细做法如下:首先在设置——》恢复——》高级启动——》立即重新启动重启后,选择疑难解答——》高级选项——》启动设置——》重启——》选择4启动安全模式启动后在此模式就可以打开注册机,然后操作注册机后…

    2022年6月9日
    78
  • 十进制,BCD数怎样转8421BCD码

    十进制,BCD数怎样转8421BCD码BCD 数是一种采用 4 位二进制数表示 1 位十进制数 0 9 而得到的数 nbsp nbsp nbsp nbsp 例如 89 的 BCD 码为 相当于将 89 中的 8 和 9 分别转为二进制 而可以得出 BCD 码 nbsp nbsp nbsp nbsp 则可以得出 89 的 BCD 数为 0 nbsp nbsp nbsp nbsp 接下来就是将此 BCD 码转为 8421BCD 码了 其实很简单 将每个分别转

    2025年6月21日
    0

发表回复

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

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