跳转至

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 小练习

  1. 从字符串 "mc_version:1.20.1" 中提取出 "1.20.1"(用 split 或 indexOf+substring)
  2. 用 String.format 输出 "玩家小明,等级30,血量80/100"
  3. 生成 10 个 1~100 的随机整数,用 StringBuilder 拼成一行输出

本章小结

  • String 不可变,比较用 equals,常用方法要熟
  • 大量拼接用 StringBuilder
  • 包装类:parseXXX / valueOf / String.valueOf
  • Math 与 Random 负责数学和随机
  • java.time 处理日期时间

下一章:11 集合框架

🏠 返回总站