Prompts-MCP 686 skills · ai / design / design-pattern / framework / fundamentals / habit / lang / tech-selection /mcp/sse
lang lang/java/coding-style/string-handling.md medium

java-string-handling

Java 字符串处理 — 循环拼接用 StringBuilder、比较用 equals 不用 ==、多变量格式化用 String.format、空判断用 isEmpty/isBlank。Use when 在循环里拼字符串 / 比较两个字符串 / 判断字符串是否为空时。

字符串拼接stringbuilder字符串比较string.formatisemptyisblank
paths
  • *.java

Java · 字符串处理

本条管字符串的拼接 / 比较 / 空判断。字符串字面量该不该抽常量见 no-magic-value.md

规则

场景 做法
循环 / 大量拼接 StringBuilder.append禁循环里 +=
少量定值拼接 直接 + 即可(编译器优化),无需 StringBuilder
比较内容相等 a.equals(b)==(== 比的是引用)
多变量格式化 String.format / 文本块,胜过一长串 +
判断空 只判空用 isEmpty();连空白也算空用 isBlank()(JDK 11+)
比较时防 null 已知常量放左边:"PAID".equals(status)

正例

// 循环拼接用 StringBuilder
StringBuilder sb = new StringBuilder();
for (Item it : items) {
    sb.append(it.getName()).append(',');
}
String csv = sb.toString();

// 内容比较用 equals;多变量用 format
if ("PAID".equals(order.getStatus())) { ... }
String msg = String.format("订单 %s 金额 %.2f", id, amount);

// 空判断
if (name == null || name.isBlank()) {   // 拦截 null、""、"   "
    throw new BusinessException("名称不能为空");
}

反例

// ❌ 循环里 += 每次都新建 String 对象,O(n²)
String csv = "";
for (Item it : items) { csv += it.getName() + ","; }

// ❌ == 比较内容:堆上不同对象即便内容相同也 false
if (status == "PAID") { ... }

// ❌ 一长串 + 拼出来可读性差,易漏空格/类型错
String msg = "订单 " + id + " 金额 " + amount;

自检

  • [ ] 循环里的字符串拼接用了 StringBuilder,没有 +=
  • [ ] 字符串内容比较用 equals,没有 ==
  • [ ] 多变量拼接用 String.format / 文本块而非长串 +
  • [ ] 空判断按需用 isEmpty / isBlank,且先防了 null?

相关