(笔试题必备)Java输入输出知识点整理

之前一直力扣刷题,核心代码模式用久了不会处理输入输出,梳理知识点以参加ACM模式的笔试。

一、从键盘输入数据

输入数据标准格式:

  1. 导包:import java.util.Scanner;
  2. Scanner的实例化:Scanner scan = new Scanner(System.in);
  3. 调用Scanner类的相关方法(next() / nextXxx()),来获取指定类型的变量

next() 和 nextLine() :

  1. next() 和 nextLine() 都可以获取字符串;
  2. next() 接收会以空格或回车作为结束标识符 ,nextLine() 只以回车作为结束标识符;
  3. next() 会删掉输入的第一个单词的前面的空格,而 nextLine() 则全部接收;
  4. 注意:比如说 nextLine() 的上一个输入残留了enter,这个字符就接收不到,把上一个输入的残留回车当作结束标识符直接结束了。

示例:

import java.util.Scanner;
public class InputOutputTest {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str1 = scan.next();
        String str2 = scan.nextLine();
        System.out.println("接收到的第一个字符为:" + str1);
        System.out.println("接收到的第二个字符为:" + str2);
    }
}

输出:

    i love java    //前后各4个空格
接收到的第一个字符为:i//忽略了前四个空格
接收到的第二个字符为: love java    //前面一个空格,后面有四个空格
i    //后面输入了4个空格和一个enter回车
接收到的第一个字符为:i//没有空格
接收到的第二个字符为:    //这里有四个空格

1、这里我前面输入4个空格,next() 先接收到之后,直接忽略了空格,并且将第一个单词后面的空格作为结束标识符。
2、nextLine() 接收了第一个单词之后的所有字符,包括被 next() 视作结束标志符的空格。
3、看到第二次输入示例:nextLine() 的上一个输入残留了enter,这个字符就接收不到,把上一个输入的残留回车当作结束标识符直接结束了。

多次输入(题目要求处理多个测试用例):

  1. boolean hasNext():检测是否还有单词输入。
  2. boolean hasNextInt()、boolean hasNextDouble():检测输入中是否整数或浮点数

示例:(这里使用 nextLine() 接收带空格的一行字符串,还有字符串以空格进行分割)

class InputOutputTest1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //多行输入
        while (scan.hasNext()) {
            String str1 = scan.nextLine();
            System.out.println("接收到的字符为:" + str1);
            String[] str2 = scan.nextLine().split(" ");
            for (String i:str2) {
                System.out.println("字符串切割:" + i);
            }
        }
    }
}

输出:

i love java
接收到的字符为:i love java
i love java
字符串切割:i
字符串切割:love
字符串切割:java

示例:(判断输入的是否是整形数据)

class InputOutputTest2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //多行输入
        while (scan.hasNextInt()) {
            int num1 = scan.nextInt();
            int num2 = scan.nextInt();
            System.out.println("接收到的两数字和为:" + (num1 + num2));
        }
    }
}

输出:

1
2
接收到的两数字和为:3

注意:如果输入不是整形数据,报错:InputMismatchException(输入数据类型不匹配)

23
i love
Exception in thread "main" java.util.InputMismatchException
	at java.base/java.util.Scanner.throwFor(Scanner.java:939)
	at java.base/java.util.Scanner.next(Scanner.java:1594)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
	at inputoutput.InputOutputTest2.main(InputOutputTest.java:30)

二、输出数据格式

输入浮点型只保留若干小数

  1. String的 format 方法:每个格式控制以%开始,后跟被格式化的数值类型。
  2. System.out.printf():这个方法延续了C语言的输出方式,通过格式化文本和参数列表输出。(与 format 方法同理,其中识别到 %n 表示换行)

示例:

class InputOutputTest3 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        Double num1 = scan.nextDouble();
        Double num2 = scan.nextDouble();
        System.out.println(String.format("输出数据为:%08.2f", num1));
        System.out.printf("输出数据为:%+,010.2f",num2);
    }
}

输出:

345.678
34544.567
输出数据为:00345.68
输出数据为:+34,544.57

注意:

  1. ”%08.2f“ 表示输出浮点型数据,数据共8列(包含小数点,不足8位前面用0补齐),小数点后保留两位。
  2. “%+,010.2f” 表示输出浮点型数据,数据共10列(包含小数点、”+“ 和 ”,“ ,不足10位用0补齐),小数点后保留两位小数。

参考文献:

  1. 牛客网输入输出(Java)总结
  2. Java中.next()和.nextLine()的区别
  3. Java基础【2】输入与输出
  4. java中String的格式化format()方法

你可能感兴趣的:(后端开发岗笔试题,java)