Scanner对象的输入结束标记

最近开始复习java了,自己不知道或者需要注意的地方自己做个笔记

package gt; 
import java.util.Scanner; 
/**
 * Created by Cronous on 2017/10/29.
 */
public class day01 {
 
    public static void main(String[] args){
        System.out.print("请输入值:");
        Scanner s = new Scanner(System.in);
        while(s.hasNext()){
            System.out.println(s.next());
        }
    }
}

我们输入 ”123 345 678“ 然后回车,发现控制台打印 

123

345

678

我看了下scanner的api它是这么说的 :

Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。

然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

所以这里我们知道它默认是以空白匹配,所以我们输入当中有空格,它会一次读取,直到回车,但是你会发现我们最后一个数字后面并没有空格,系统也将数据分割出来了,

可能到这里不知道我在说啥,看下个例子:

package gt; 
import java.util.Scanner; 
/**
 * Created by Cronous on 2017/10/29.
 */
public class day01 {
 
    public static void main(String[] args){
        System.out.print("请输入值:");
        Scanner s = new Scanner(System.in);
        s.useDelimiter(" ");//这里我们将系统分隔符主动设置为 " "
        while(s.hasNext()){
            System.out.println(s.next());
        }
    }
}

在这里我们主动设置了一个分隔符 " " 然后上次一样输入数据,输入完按回车键 控制台效果如下:

123

345

这里我们会发现第三个数并没有输出,这是为什么? 我们发现我们输入完最后一个数时直接按回车了并没有输入我们设定的分隔符 " "

所以第三个数并没有被打印出来,我们这样输入 ”123 345 678 “再按回车就可以正常输出三个值,保证最后还有一个空格即可

再看一个代码(注意这里有个坑),我的需求是 获取输入值 ,当输入值为 "quit"时我们结束输入

package gt; 
import java.util.Scanner; 
/**
 * Created by Cronous on 2017/10/29.
 */
public class day01 {
 
    public static void main(String[] args){
        System.out.print("请输入值:");
        Scanner s = new Scanner(System.in);
        while(s.hasNext()){
           if("quit".equals(s.next())){
               break;
           }else{
               System.out.println(s.next());
           }
        }
    }
}

这里我们输入 ”123 345 quit“  回车确认,这里我们希望得到输出为

123

345

可是我们的得到的输出为

345

为什么只有”345“输出?  这里我通过debug发现一个问题:因为当我们判断是否等于 ”quit“值时我们调用 s.next() 已经获取”123“了,后来打印的是再一次获取的值,也就是获取的下一个值 "345"了,所以最后出现了 只打印 ”345“的问题

下面给出正确代码,我们只需要保证s.next()值统一就行

package gt; 
import java.util.Scanner; 
/**
 * Created by Cronous on 2017/10/29.
 */
public class day01 {
 
    public static void main(String[] args){
        System.out.print("请输入值:");
        Scanner s = new Scanner(System.in);
        while(s.hasNext()){
           String a = s.next();//将s.next()赋值给变量a
           if("quit".equals(a)){
               break;
           }else{
               System.out.println(a);
           }
        }
    }
}

这样即可解决,问题不大,但是需要注意一下。 

Scanner的输入及理解

Scanner

  • new 新生的意思
  • System.out输出
  • System.in 输入

Scannery对象

基本语法:

Scanner s = new Scanner(System.in);

通过Scanner类的next(下一个)与nextline(下一行)方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextline()判断是否还有输入的数据。 

package Scnner;
import java.util.Scanner;
public class Day01 {	
	public static void main(String[] args) {
		
		//创建一个扫描对象,用于接收键盘数据		
		Scanner scanner = new Scanner(System.in);	
		//接收用户的输入,并把它封装scanner		
		System.out.println("使用next方式接收:");
		
		//判断用户有没有输出字符串
		if (scanner.hasNext()==true)	{
       //这里默认==true,不用谢也可以,但是还是建议写
			String str = scanner.next();
			//使用next方式接收
			System.out.println("输出的内容为:" str);
		}
	}	
}
  • next()

一定要读取到有效字符后才可以结束输入。

对输入有效字符之前遇到的空白,next()方法会自动将其去掉。

只有输入有效字符后才将其后面输入的空白作为分隔符或者借宿符。

next()不能得到带有空格的字符串

  • nextLine()

以enter为结束符,也就是说nextLine()方法返回的输入回车之前的所有字符。

可以获得空白

package Scnner;
import java.util.Scanner;
public class Day02 {
	public static void main(String[] args) {
		//从键盘来接收数据
		Scanner scanner = new Scanner(System.in);
		System.out.println("使用nextLine方式接收:");
		
		//判断是否还有输入
		if (scanner.hasNextLine()){
			
			//等待用户去输入
			String str = scanner.nextLine();			
			System.out.println("输出的内容:" str);			
		}
		scanner.close();
	}
}

当然也可以不要if去判断

if (scanner.hasNextLine())
package Scnner;
import java.util.Scanner;
public class Day03 {
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);    
        System.out.println("请输入数据:");
        String str = scanner.nextLine();
        System.out.println("输出的内容:" str);       
        scanner.close();      
    }

这样也是可以的

Scanner输入内容理解(重点)

我个人是这样理解的

输入输出我们只要记住3行代码就行

System.out.println("请输入数据:");
        String str = scanner.nextLine();
        System.out.println("输出的内容:" str);

第一行代码是标题

请输入数据:

第二行代码: 是我们键盘所输出的所有内容,知道你按下回车键(enter)之后,把所有内容变成一个变量保存再str里面

第三行代码:则是等待第二行代码运行完成后,将输出内容 str(你键盘敲下的所有字符,也就是内容) 一起显示出来

如下图

在这里插入图片描述

第一行为第一行代码

第二行hello world 为第二行代码,也就是你键盘敲下的内容

第三行则是等待第二行代码运行完成后,输出的内衣 键盘敲下的所有字符一起显示出来

注意

//凡是IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉
        scanner.close();
        //IO流 输入输出流

以上为个人经验,希望能给大家一个参考,也希望大家多多支持Devmax。 

关于Scanner对象的输入结束标记问题的更多相关文章

  1. 详解OpenCV执行连通分量标记的方法和分析

    在本教程中,您将学习如何使用 OpenCV 执行连通分量标记和分析。具体来说,我们将重点介绍 OpenCV 最常用的连通分量标记函数:cv2.connectedComponentsWithStats,感兴趣的可以了解一下

  2. JSP页面文件中base标记用法实例分析

    这篇文章主要介绍了JSP页面文件中base标记用法,以实例形式较为详细的分析了JSP中base标记的功能与具体使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

  3. 微信小程序地图标记多个位置的方法详解

    地图是我们平时经常用到的组件,而且地图是显示在最高层的原生组件,下面这篇文章主要给大家介绍了关于微信小程序地图标记多个位置的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

  4. 一个可以删除字符串中HTML标记的PHP函数

    一个可以删除字符串中HTML标记的PHP函数作者:limote当访客留言和发帖时,我们并不希望访客在留言和帖子中使用HTML标记,所以在访客提交留言和帖子时我门得把HTML标记删除,下面的函数就是实现此功能的函数

  5. vue原理Compile之optimize标记静态节点源码示例

    这篇文章主要为大家介绍了vue原理Compile之optimize标记静态节点源码示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  6. Python Matplotlib marker 标记详解

    这篇文章主要介绍了Python Matplotlib marker 标记详解,Matplotlib,风格类似 Matlab 的基于 Python 的图表绘图系统,详细内容需要的小伙伴可以参考一下

  7. JSP由浅入深(11)—— 标记库

    JSP1.1提出了一种扩展的JSP标志的方法,这种方法命名为“标志库”。为了介绍标志库,在本教程中我们使用Blazix标志库作为例子。这个标志库只能用在Blazix服务器中,这个服务器你可以免费下载。每一个标志库都有它自己的标志库特殊的文档。对于Blazix标志库而言,directive如下:上面者句中“uri”就是指出了标志库描述所在的地方。标志库的前缀是不同的。这条语句将所有的表单输入区域输入到blx:getProperty中,

  8. 关于Scanner对象的输入结束标记问题

    这篇文章主要介绍了关于Scanner对象的输入结束标记问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  9. iOS自动进行View标记的方法详解

    这篇文章主要给大家介绍了关于iOS自动进行View标记的相关资料,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

  10. Pytest自定义mark标记筛选用例

    这篇文章介绍了Pytest自定义mark标记筛选用例的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部