【Java】Scanner 的用法:单行/多行输入 您所在的位置:网站首页 java输入一串字符进入数组 【Java】Scanner 的用法:单行/多行输入

【Java】Scanner 的用法:单行/多行输入

2023-12-27 05:47| 来源: 网络整理| 查看: 265

【Java】Scanner 的用法:单行/多行输入 一、Java Scanner类Scanner类简介Scanner类的常用方法Scanner类的常用方法2 二、Java的Scanner用法,主要用于算法笔试时的控制台输入1 问题:解决这种情况下的Scanner输入:单行,多行,数值,字符串2 单行输入多个参数3 多行输入多个参数,每行参数个数不定 三、自己的理解:next()和nextLine()的区别字符串以空格为分隔符赋值总结:

本文较大程度参考以下博客,并根据自己本身需求与理解撰写。

https://blog.csdn.net/qq_34826261/article/details/97616358

https://blog.csdn.net/qq_40164190/article/details/81917208

一、Java Scanner类 Scanner类简介

Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本的新的实用程序。它是以前的StringTokenizer和Matcher类之间的某种结合。由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分。于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法。这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析。借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器。

Scanner类的常用方法

在这里插入图片描述 其实上图的意思就是,比如:nextlnt():只读取int值,就是只能读取整数类型的数据,如果输入了非整型的数据(浮点型字符串等)就会报错。 nextFloat()、nextDouble()这些也是以此类推,只能读取符合该类型的数据。

代码:

public class Text { public static void main(String []args) { Scanner input = new Scanner(System.in); System.out.println("请输入一个字符串(中间能加空格或符号)"); String a = input.nextLine(); System.out.println("请输入一个字符串(中间不能加空格或符号)"); String b = input.next(); System.out.println("请输入一个整数"); int c; c = input.nextInt(); System.out.println("请输入一个double类型的小数"); double d = input.nextDouble(); System.out.println("请输入一个float类型的小数"); float f = input.nextFloat(); System.out.println("按顺序输出abcdf的值:"); System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); System.out.println(f); } }

运行结果:

请输入一个字符串(中间能加空格或符号) 我爱祖国! 请输入一个字符串(中间不能加空格或符号) ILoveChina 请输入一个整数 520 请输入一个double类型的小数 12.26e3 请输入一个float类型的小数 3.1415926 按顺序输出abcdf的值: 我爱祖国! ILoveChina 520 12260.0 3.1415925 Scanner类的常用方法2

在这里插入图片描述

代码演示:

public class inputInformation { public static void main(String args[]) { Scanner scan = new Scanner(System.in); //构造Scanner类的对象scan,接收从控制台输入的信息 System.out.println("请输入你的姓名"); String name = scan.nextLine();//接收一个字符串,可以加除Enter以外的所有符号,包括空格和Tab System.out.println("请输入你的ID"); String ID ; while(scan.hasNextLine()) {// hasNextLine()方法判断当前是否有输入,当键盘有输入后执行循环 if(scan.hasNextInt()) {// 判断输入的值是否为整数类型,当为整数类型时执行循环 ID = scan.nextLine(); System.out.println("你输入的姓名为:"+name); System.out.println("你输入的ID为:"+ID); break; }else { System.out.println("请输入数字哦!"); ID = scan.nextLine(); continue; } } } }

运行结果如下:

请输入你的姓名 华为 请输入你的ID q764323221 请输入数字哦! 764323221

Scanner.close()方法的作用是关闭输入的流,释放内存。Scanner 类实例化的时候需要一个InputStream流作为参数,Scanner的close就是关闭InputStream流的,一般是IO流或scanner方法使用完后就可以调用close()方法释放内存了,如果你是小程序可以不用使用.close方法,这个不影响,但如果项目很大的时候就肯定要用了,所以建议养成良好的习惯。

二、Java的Scanner用法,主要用于算法笔试时的控制台输入 1 问题:解决这种情况下的Scanner输入:单行,多行,数值,字符串

平时写程序一般不用Scanner,线上笔试的时候,各大公司热衷于Scanner输入。 平时用LeetCode刷题也不会用到,结果多次在笔试时候卡在Scanner,特来总结一波。

2 单行输入多个参数 在一行输入多个参数

以空格(也可用其他的符号,不重要)为分割。

// 输入如下 ABB CCC DDD EEE 123 435

程序如下:

import java.util.Arrays; import java.util.Scanner; public class myScanner { Scanner sc = new Scanner(System.in); public static void main(String[] args) { System.out.println("输入:"); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); // 读取一行 System.out.println("输出:"); System.out.println(str); String[] strIn = str.trim().split(" "); // 以空格分割 System.out.println(Arrays.toString(strIn)); } }

读出来的只能是字符串,如果想全部为数字,需要将读出来的字符串强行转换为数字(parseInt、parseLong等),运行示例如下:

在这里插入图片描述

3 多行输入多个参数,每行参数个数不定

多行输入元素,其中第一行几个数字表示下面几行的个数,每行可能输入不等数量的参数

以三行输入为例,第一行输入两个数字m,n,分别表示数组num1和num2的长度,第二行和第三行输入num1和num2的元素,以空格分隔。

// 输入如下 3 4 10 2 3 11 4 5 6

程序如下:

import java.util.Arrays; import java.util.Scanner; public class Scanner2 { public static void main(String[] args) { System.out.println("输入:"); Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int n = sc.nextInt(); int t = sc.nextInt(); // 换成其他数据类型也一样,其他数值类型就修改int跟nextInt就可以了, //String就把nextInt()换成next() System.out.println(m); System.out.println(n); System.out.println(t); int[] num1 = new int[n]; int[] num2 = new int[t]; for(int i = 0; i num2[i] = sc.nextInt(); } System.out.println(Arrays.toString(num2)); } }

运行示例:

在这里插入图片描述

换成其他数据类型也一样,其他数值类型就修改int跟nextInt就可以了,String就把nextInt()换成next()

三、自己的理解: next()和nextLine()的区别

next():只读取输入直到空格。它不能读两个由空格或符号隔开的单词。此外,next()在读取输入后将光标放在同一行中。(next()只读空格之前的数据,并且光标指向本行)

nextLine():读取输入,包括单词之间的空格和除回车以外的所有符号(即。它读到行尾)。读取输入后,nextLine()将光标定位在下一行。

public class MyScanner { public static void main(String[] args) { System.out.println("输入:"); Scanner sc = new Scanner(System.in); int m = sc.nextInt(); System.out.println("m: "+m); //sc.nextLine(); // 很重要,跳到第二行 // 若直接确定行数,注释掉上面两行,加入下面一行 // int m = 3; String[] strArr = new String[m]; // 从第二行开始读取 for(int i = 0; i String[] tmp = strArr[i].trim().split(" "); strToOne.add(tmp); } System.out.println(strToOne); // 形象点显示 System.out.print("["); for(int i = 0; i public static void main(String[] args) { System.out.println("输入:"); Scanner sc = new Scanner(System.in); int m = sc.nextInt(); sc.nextLine(); // 很重要,跳到第二行 // 若直接确定行数,注释掉上面两行,加入下面一行 // int m = 3; String[] strArr = new String[m]; // 从第二行开始读取 for(int i = 0; i String[] tmp = strArr[i].trim().split(" "); strToOne.add(tmp); } System.out.println(strToOne); // 形象点显示 System.out.print("["); for(int i = 0; i public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("输入:"); Scanner sc = new Scanner(System.in); String nextLine = sc.nextLine(); String[] str = nextLine.trim().split(" "); System.out.println(Arrays.toString(str)); int[] num = new int[str.length]; for (int i = 0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有