10 常用类与 API¶
本章目标¶
- 深入掌握 String 及其常用方法
- 掌握 StringBuilder
- 掌握包装类与自动装箱
- 掌握 Math、Random、日期时间
10.1 String 深入¶
String 是不可变对象(内容不能改,每次修改都产生新对象)。
常用方法¶
String s = "Hello, Minecraft!";
s.length(); // 长度: 17
s.charAt(0); // 取第 0 个字符: 'H'
s.substring(7); // 从第 7 位截取: "Minecraft!"
s.substring(0, 5); // 截取 [0,5): "Hello"
s.indexOf("Mine"); // 找子串位置: 7,找不到返回 -1
s.contains("craft"); // 是否包含: true
s.startsWith("He"); // true
s.endsWith("!"); // true
s.toUpperCase(); // "HELLO, MINECRAFT!"
s.toLowerCase(); // 小写
s.trim(); // 去掉首尾空格
s.replace("Hello", "Hi"); // 替换: "Hi, Minecraft!"
s.split(","); // 按逗号拆成数组: ["Hello", " Minecraft!"]
s.isEmpty(); // 是否为空
s.equals("Hello, Minecraft!"); // 内容比较(重要!)
s.equalsIgnoreCase("hello, minecraft!"); // 忽略大小写
判断空串别用 ==
if (s == "") ❌ 永远不对!用 s.isEmpty() 或 s.equals("")。
格式化字符串¶
String name = "小明";
int level = 30;
// 方式一:+ 拼接
String msg = "玩家 " + name + " 等级 " + level;
// 方式二:String.format(推荐,清晰)
String msg2 = String.format("玩家 %s 等级 %d", name, level);
// 方式三:formatted(Java 15+)
String msg3 = "玩家 %s 等级 %d".formatted(name, level);
常用占位符:%s 字符串、%d 整数、%f 小数、%.1f 保留一位小数。
String.format("%.1f", 3.14159); // "3.1"
10.2 StringBuilder¶
大量拼接字符串时,用 + 会生成很多临时对象,性能差。用 StringBuilder:
StringBuilder sb = new StringBuilder();
sb.append("玩家: ");
sb.append(name);
sb.append(" 等级: ");
sb.append(level);
String result = sb.toString();
模组里给物品写描述(Lore)、生成大文本时常用。
10.3 包装类(Wrapper Class)¶
每种基本类型都有对应的包装类:
| 基本类型 | 包装类 |
|---|---|
| int | Integer |
| double | Double |
| boolean | Boolean |
| char | Character |
| long | Long |
| ... | ... |
自动装箱 / 拆箱¶
Integer n = 42; // 自动装箱:int -> Integer
int m = n; // 自动拆箱:Integer -> int
常用静态方法¶
Integer.parseInt("123"); // String -> int: 123
Integer.valueOf("123"); // String -> Integer
String.valueOf(123); // int -> String: "123"
Double.parseDouble("3.14");
Integer.MAX_VALUE; // 2147483647
包装类 == 的坑
Integer a = 127, b = 127;
a == b; // true(-128~127 有缓存)
Integer c = 200, d = 200;
c == d; // false!超出缓存范围,比较的是地址
c.equals(d); // true,应该用 equals
.equals() 或拆箱后再比。
10.4 Math 类¶
Math.abs(-5); // 5
Math.max(3, 7); // 7
Math.min(3, 7); // 3
Math.pow(2, 10); // 1024.0
Math.sqrt(16); // 4.0
Math.floor(3.7); // 3.0
Math.ceil(3.2); // 4.0
Math.round(3.5); // 4(四舍五入)
Math.random(); // [0,1) 随机小数
随机整数¶
int r = (int) (Math.random() * 100); // 0~99 随机整数
10.5 Random 类(更专业)¶
import java.util.Random;
Random rand = new Random();
rand.nextInt(100); // 0~99
rand.nextInt(10, 20); // 10~19(Java 17 支持区间)
rand.nextDouble(); // [0,1)
rand.nextBoolean(); // true/false
模组随机数
掉落物、暴击、随机生成都用 Random。种子相同 → 随机序列相同(结构生成需要可复现时用它)。
10.6 日期时间¶
Java 8 之后的 java.time 包:
import java.time.*;
import java.time.format.DateTimeFormatter;
LocalDate today = LocalDate.now(); // 2026-08-24
LocalTime now = LocalTime.now(); // 22:03:05
LocalDateTime dt = LocalDateTime.now(); // 2026-08-24T22:03:05
// 格式化
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String s = dt.format(fmt); // "2026-08-24 22:03:05"
// 解析
LocalDateTime parsed = LocalDateTime.parse("2026-08-24 22:03:05", fmt);
10.7 实战:模组场景¶
// 给物品生成描述文本
String buildLore(String itemName, int damage, double speed) {
StringBuilder sb = new StringBuilder();
sb.append("§6").append(itemName).append("\n");
sb.append("§7攻击伤害: §c").append(damage).append("\n");
sb.append("§7攻击速度: §a").append(String.format("%.2f", speed));
return sb.toString();
}
// 随机掉落判断(20% 概率)
Random rand = new Random();
if (rand.nextDouble() < 0.2) {
// 掉落稀有物品
}
10.8 小练习¶
- 从字符串
"mc_version:1.20.1"中提取出"1.20.1"(用 split 或 indexOf+substring) - 用 String.format 输出
"玩家小明,等级30,血量80/100" - 生成 10 个 1~100 的随机整数,用 StringBuilder 拼成一行输出
本章小结¶
- String 不可变,比较用 equals,常用方法要熟
- 大量拼接用 StringBuilder
- 包装类:parseXXX / valueOf / String.valueOf
- Math 与 Random 负责数学和随机
- java.time 处理日期时间
下一章:11 集合框架