Java 入门教程-5

1. Scanner 类

Scanner 位于 java.util 包,用于从键盘读取输入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;

public class ScannerDemo {
public static void main(String[] args) {
// System.in 表示标准输入(键盘输入)
Scanner sc = new Scanner(System.in);

System.out.print("请输入一个整数:");
int num = sc.nextInt(); // 读取整数
System.out.println("你输入的是:" + num);

System.out.print("请输入一个小数:");
double d = sc.nextDouble(); // 读取小数
System.out.println("你输入的是:" + d);

sc.nextLine(); // 消耗掉缓冲区残留的换行符
System.out.print("请输入一行文字:");
String line = sc.nextLine(); // 读取一整行字符串
System.out.println("你输入的是:" + line);

sc.close(); // 用完关闭, 释放资源
}
}

常用方法:

方法 作用
nextInt() 读取一个整数
nextDouble() 读取一个小数
next() 读取一个单词,遇空格结束
nextLine() 读取一整行,含空格,遇回车结束

注意:nextInt()nextDouble() 只读取数据本身,会把末尾的换行符留在缓冲区。此时若紧接着调用 nextLine(),会直接读到那个空行。解决办法是先调用一次 nextLine() 把残留换行“吃掉”,或干脆全部用 nextLine() 读取后再做类型转换。

2. Random 类

Random 也位于 java.util 包,用于生成随机数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Random;

public class RandomDemo {
public static void main(String[] args) {
Random r = new Random();

int n1 = r.nextInt(10); // 生成 [0, 10) 的随机整数: 0~9
int n2 = r.nextInt(100); // 生成 [0, 100) 的随机整数: 0~99
int n3 = r.nextInt(6) + 1; // 生成 1~6, 模拟掷骰子

System.out.println(n1);
System.out.println(n2);
System.out.println(n3);
}
}

nextInt(边界值) 生成 [0, 边界值) 区间,不包含边界值本身。想生成 [min, max] 区间,可写成 r.nextInt(max - min + 1) + min

3. Math 类

Math 位于 java.lang 包,无需 import 即可使用,方法都是静态的,直接用类名调用。

方法 作用 示例结果
Math.abs(x) 绝对值 Math.abs(-5) -> 5
Math.max(a, b) 取较大值 Math.max(3, 7) -> 7
Math.min(a, b) 取较小值 Math.min(3, 7) -> 3
Math.pow(a, b) a 的 b 次方 Math.pow(2, 3) -> 8.0
Math.sqrt(x) 平方根 Math.sqrt(16) -> 4.0
Math.ceil(x) 向上取整 Math.ceil(3.2) -> 4.0
Math.floor(x) 向下取整 Math.floor(3.8) -> 3.0
Math.round(x) 四舍五入 Math.round(3.5) -> 4
Math.random() 生成 [0,1) 随机小数 0 ~ 0.999…

4. String 类

String 位于 java.lang 包,无需 import。字符串是不可变的引用类型,常用方法如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class StringDemo {
public static void main(String[] args) {
String s = "Hello Java";

System.out.println(s.length()); // 10 长度
System.out.println(s.charAt(0)); // H 取下标 0 的字符
System.out.println(s.indexOf("Java")); // 6 找子串首次出现的位置
System.out.println(s.substring(6)); // Java 从下标 6 截到末尾
System.out.println(s.substring(0, 5)); // Hello 截取 [0,5)
System.out.println(s.toUpperCase()); // HELLO JAVA
System.out.println(s.toLowerCase()); // hello java
System.out.println(s.contains("Java")); // true 是否包含子串
System.out.println(s.replace("Java", "World")); // Hello World

// 去掉首尾空格
String t = " hi ";
System.out.println(t.trim()); // hi
System.out.println(t.trim().length()); // 2
}
}

4.1 字符串比较

判断两个字符串内容是否相等,必须用 equals(),不能用 ==== 比较的是引用地址,不是内容。

1
2
3
4
5
6
String a = "Hello";
String b = new String("Hello");

System.out.println(a == b); // false: 两个不同的对象
System.out.println(a.equals(b)); // true: 内容相同
System.out.println(a.equalsIgnoreCase("hello")); // true: 忽略大小写

4.2 字符串拆分与拼接

1
2
3
4
5
String csv = "张三,18,男";
String[] parts = csv.split(","); // 按逗号拆分成数组
for (String p : parts) {
System.out.println(p);
}

输出:

1
2
3
张三
18

5. StringBuilder 类

字符串是不可变的,频繁用 + 拼接会不断创建新对象,效率低。需要大量拼接时应使用 StringBuilder

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();

sb.append("Hello");
sb.append(" ");
sb.append("Java");

System.out.println(sb.toString()); // Hello Java
System.out.println(sb.length()); // 10

sb.insert(5, ","); // 在下标 5 处插入逗号
System.out.println(sb); // Hello, Java

sb.reverse(); // 反转
System.out.println(sb); // avaJ ,olleH

// 循环拼接一串数字
StringBuilder result = new StringBuilder();
for (int i = 1; i <= 10; i++) {
result.append(i).append(" ");
}
System.out.println(result.toString()); // 输出: 1 2 3 4 5 6 7 8 9 10
}
}

常用方法:

  • append(...):追加内容,可连续调用(链式)
  • insert(下标, 内容):在指定位置插入
  • delete(开始, 结束):删除一段
  • reverse():反转
  • toString():转成 String

Java 入门教程-5
https://flowerdown.org/posts/20230827-191740
作者
Unrealfeathers
发布于
2023年8月27日
许可协议