Java 有一个 Scanner 类,用这个类可以接受键盘输入。
步骤:
- 导入该类所在的包(要使用一个类的话就必须先导入该类所在的包)
- 创建该类的对象
- 调用里面的功能
Scanner 有两套系统。
第一套系统:
nextInt();
nextDouble();
next();
// 等等...
第二套系统:
nextLine(); // 接收一个字符串
程序示例:
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 只有 sc 是变量名,只有 sc 可以改变,其他的都不允许改变。
System.out.print("请输入一个用户的名字: ");
String name = sc.next(); // 接收一个字符串
System.out.print("请输入用户的年龄: ");
int age = sc.nextInt(); // 接收一个整数
System.out.print("请输入用户的薪水: ");
double salary = sc.nextDouble(); // 接收一个double数据
System.out.println("用户信息如下:");
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.println("薪水: " + salary);
}
}
执行结果:
请输入一个用户的名字: 小章
请输入用户的年龄: 20
请输入用户的薪水: 20000
用户信息如下:
姓名: 小章
年龄: 20
薪水: 20000.0
第一套系统,遇到空白停止接收,剩余输入存在于缓冲中,等待下一次读入。
程序示例:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("enter some words: ");
String s = sc.next();
System.out.println(s);
}
}
执行结果:
enter some words: xiao cheng
xiao
程序示例:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.println(num1);
System.out.println("请输入第二个整数:");
int num2 = sc.nextInt();
System.out.println(num2);
}
}
执行结果:
请输入第一个整数:
123 456
123
请输入第二个整数:
456
练习:
import java.util.Scanner;
public class Input {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a, b;
System.out.print("输入一个整数:");
a = sc.nextInt();
System.out.print("输入另一个整数:");
b = sc.nextInt();
System.out.println("两个整数的和为 " + (a + b));
}
}
执行结果:
输入一个整数:198
输入另一个整数:876
两个整数的和为 1074
第二套系统,可以接收一整行输入,直到遇到回车才停止接收数据。
程序示例:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个字符串:");
String line1 = sc.nextLine();
System.out.println(line1);
System.out.println("请输入第二个字符串:");
String line2 = sc.nextLine();
System.out.println(line2);
}
}
执行结果:
请输入第一个字符串:
hello world
hello world
请输入第二个字符串:
早 上 好
早 上 好
两套系统混着用的一个弊端:
import java.util.Scanner;
public class test2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num1 = sc.nextInt();
System.out.println(num1);
System.out.println("请输入一个字符串:");
String line1 = sc.nextLine();
System.out.println(line1);
System.out.println("结束");
}
}
执行结果 1:
请输入一个数字:
123
123
请输入一个字符串:
结束
line1
读取到了一个字符串,但是不会将字符串存储进去,所以 line1
是空的,因此此处的 System.out.println(line1);
相当于 System.out.println("");
,也相当于 System.out.println();
。因此仅仅只打印了一个换行。
执行结果 2:
请输入一个数字:
123 456
123
请输入一个字符串:
456
结束
程序示例:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个字符串:");
String line1 = sc.nextLine();
System.out.print(line1); // 是 print 而不是 println
System.out.println("请输入第二个字符串:");
String line2 = sc.nextLine();
System.out.println(line2);
}
}
执行结果:
请输入第一个字符串:
hello world
hello world请输入第二个字符串:
你 好
你 好
由此可见,nextLine()
不会把换行符存储在字符串中。nextLine()
可以将换行符从缓冲区中读取走且不放到字符串中,这样换行符既不在缓冲区,也不在换行符中,相当于丢弃了。