iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Scanner对象的输入结束标记问题怎么解决
  • 485
分享到

Scanner对象的输入结束标记问题怎么解决

2023-06-30 14:06:32 485人浏览 独家记忆
摘要

这篇文章主要介绍“Scanner对象的输入结束标记问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Scanner对象的输入结束标记问题怎么解决”文章能帮助大家解决问题。Scanner对象的

这篇文章主要介绍“Scanner对象的输入结束标记问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Scanner对象的输入结束标记问题怎么解决”文章能帮助大家解决问题。

Scanner对象的输入结束标记

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

package gt; import java.util.Scanner; 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; 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; 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; 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);//接收用户的输入,并把它封装scannerSystem.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(你键盘敲下的所有字符,也就是内容) 一起显示出来

如下图

Scanner对象的输入结束标记问题怎么解决

第一行为第一行代码

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

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

注意

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

关于“Scanner对象的输入结束标记问题怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Scanner对象的输入结束标记问题怎么解决

本文链接: https://www.lsjlt.com/news/329623.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ 生态系统中流行库和框架的贡献指南
    作为 c++++ 开发人员,通过遵循以下步骤即可为流行库和框架做出贡献:选择一个项目并熟悉其代码库。在 issue 跟踪器中寻找适合初学者的问题。创建一个新分支,实现修复并添加测试。提交...
    99+
    2024-05-15
    框架 c++ 流行库 git
  • C++ 生态系统中流行库和框架的社区支持情况
    c++++生态系统中流行库和框架的社区支持情况:boost:活跃的社区提供广泛的文档、教程和讨论区,确保持续的维护和更新。qt:庞大的社区提供丰富的文档、示例和论坛,积极参与开发和维护。...
    99+
    2024-05-15
    生态系统 社区支持 c++ overflow 标准库
  • c++中if elseif使用规则
    c++ 中 if-else if 语句的使用规则为:语法:if (条件1) { // 执行代码块 1} else if (条件 2) { // 执行代码块 2}// ...else ...
    99+
    2024-05-15
    c++
  • c++中的继承怎么写
    继承是一种允许类从现有类派生并访问其成员的强大机制。在 c++ 中,继承类型包括:单继承:一个子类从一个基类继承。多继承:一个子类从多个基类继承。层次继承:多个子类从同一个基类继承。多层...
    99+
    2024-05-15
    c++
  • c++中如何使用类和对象掌握目标
    在 c++ 中创建类和对象:使用 class 关键字定义类,包含数据成员和方法。使用对象名称和类名称创建对象。访问权限包括:公有、受保护和私有。数据成员是类的变量,每个对象拥有自己的副本...
    99+
    2024-05-15
    c++
  • c++中优先级是什么意思
    c++ 中的优先级规则:优先级高的操作符先执行,相同优先级的从左到右执行,括号可改变执行顺序。操作符优先级表包含从最高到最低的优先级列表,其中赋值运算符具有最低优先级。通过了解优先级,可...
    99+
    2024-05-15
    c++
  • c++中a+是什么意思
    c++ 中的 a+ 运算符表示自增运算符,用于将变量递增 1 并将结果存储在同一变量中。语法为 a++,用法包括循环和计数器。它可与后置递增运算符 ++a 交换使用,后者在表达式求值后递...
    99+
    2024-05-15
    c++
  • c++中a.b什么意思
    c++kquote>“a.b”表示对象“a”的成员“b”,用于访问对象成员,可用“对象名.成员名”的语法。它还可以用于访问嵌套成员,如“对象名.嵌套成员名.成员名”的语法。 c++...
    99+
    2024-05-15
    c++
  • C++ 并发编程库的优缺点
    c++++ 提供了多种并发编程库,满足不同场景下的需求。线程库 (std::thread) 易于使用但开销大;异步库 (std::async) 可异步执行任务,但 api 复杂;协程库 ...
    99+
    2024-05-15
    c++ 并发编程
  • 如何在 Golang 中备份数据库?
    在 golang 中备份数据库对于保护数据至关重要。可以使用标准库中的 database/sql 包,或第三方包如 github.com/go-sql-driver/mysql。具体步骤...
    99+
    2024-05-15
    golang 数据库备份 mysql git 标准库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作