news 2026/4/4 15:33:02

Java String API完全指南:从入门到实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java String API完全指南:从入门到实战

在Java编程的世界里,String类可能是我们最早接触、使用最频繁的类之一。它看似简单,却隐藏着许多精妙的设计和实用的功能。让我们深入探索掌握String API。

一、String基础:不可变的艺术

1.1 String的不可变性

java

// String对象一旦创建就不可修改 String str = "Hello"; str.concat(" World"); // 返回新对象,原str不变 System.out.println(str); // 输出: Hello // 正确的方式 String newStr = str.concat(" World"); System.out.println(newStr); // 输出: Hello World

1.2 创建String对象的多种方式

java

// 方式1:字面量创建(推荐) String s1 = "Java"; // 方式2:构造函数 String s2 = new String("Java"); // 方式3:字符数组 char[] chars = {'J', 'a', 'v', 'a'}; String s3 = new String(chars); // 方式4:字节数组 byte[] bytes = {74, 97, 118, 97}; String s4 = new String(bytes, StandardCharsets.UTF_8);

二、核心API详解

2.1 长度与判空

java

String text = "Hello Java"; // 获取长度 int length = text.length(); // 10 // 检查是否为空 boolean isEmpty = text.isEmpty(); // false // 检查是否为空白(Java 11+) boolean isBlank = text.isBlank(); // false boolean isBlank2 = " ".isBlank(); // true

2.2 字符串比较

java

String s1 = "Java"; String s2 = "java"; String s3 = "Java"; // equals - 区分大小写 boolean b1 = s1.equals(s2); // false // equalsIgnoreCase - 不区分大小写 boolean b2 = s1.equalsIgnoreCase(s2); // true // compareTo - 字典序比较 int result = s1.compareTo(s2); // 负数('J' < 'j') // contentEquals - 与任何CharSequence比较 boolean b3 = s1.contentEquals(new StringBuilder("Java")); // true

2.3 字符串查找

java

String text = "Java Programming is fun!"; // 查找字符 int index1 = text.indexOf('a'); // 1 int index2 = text.lastIndexOf('a'); // 18 // 查找字符串 int index3 = text.indexOf("Pro"); // 5 int index4 = text.lastIndexOf("is"); // 17 // 检查前缀/后缀 boolean starts = text.startsWith("Java"); // true boolean ends = text.endsWith("fun!"); // true // 包含检查 boolean contains = text.contains("Program"); // true

2.4 字符串截取与分割

java

String text = "apple,banana,orange,grape"; // 截取子串 String sub1 = text.substring(6); // "banana,orange,grape" String sub2 = text.substring(6, 12); // "banana" // 分割字符串 String[] fruits = text.split(","); // 结果: ["apple", "banana", "orange", "grape"] // 限制分割次数 String[] limited = text.split(",", 2); // 结果: ["apple", "banana,orange,grape"] // 使用正则表达式分割 String complex = "a1b2c3d4"; String[] parts = complex.split("\\d"); // 结果: ["a", "b", "c", "d"]

2.5 字符串替换

java

String text = "I love Java. Java is great!"; // 简单替换 String replaced = text.replace("Java", "Python"); // 结果: "I love Python. Python is great!" // 正则替换 String regexReplaced = text.replaceAll("\\bJava\\b", "Python"); // 替换首个匹配项 String firstReplaced = text.replaceFirst("Java", "Python"); // 字符替换 String charReplaced = text.replace('a', 'A');

2.6 大小写转换与修剪

java

String text = " Hello Java "; // 大小写转换 String upper = text.toUpperCase(); // " HELLO JAVA " String lower = text.toLowerCase(); // " hello java " // 去除首尾空白 String trimmed = text.trim(); // "Hello Java" // Java 11+ 增强修剪 String stripped = text.strip(); // "Hello Java" String leadingStripped = text.stripLeading(); // "Hello Java " String trailingStripped = text.stripTrailing(); // " Hello Java"

2.7 字符串连接与重复

java

// 传统连接方式 String result1 = "Hello" + " " + "World"; // 使用concat方法 String result2 = "Hello".concat(" ").concat("World"); // Java 8+ join方法 String result3 = String.join("-", "2024", "01", "15"); // 结果: "2024-01-15" String[] words = {"Java", "is", "awesome"}; String result4 = String.join(" ", words); // 结果: "Java is awesome" // Java 11+ repeat方法 String repeated = "Java ".repeat(3); // "Java Java Java "

三、高级特性与最佳实践

3.1 字符串格式化

java

// 传统格式化 String formatted1 = String.format("姓名: %s, 年龄: %d, 分数: %.2f", "张三", 25, 95.5); // Java 15+ 文本块(多行字符串) String json = """ { "name": "张三", "age": 25, "skills": ["Java", "Spring", "MySQL"] } """;

3.2 性能优化:StringBuilder vs StringBuffer

java

// 不适合的场景 - 大量字符串拼接 String result = ""; for (int i = 0; i < 10000; i++) { result += i; // 每次循环创建新String对象,性能差! } // 正确的做法 - 使用StringBuilder(非线程安全) StringBuilder sb = new StringBuilder(); for (int i = 0; i < 10000; i++) { sb.append(i); } String result = sb.toString(); // StringBuffer(线程安全,性能稍差) StringBuffer buffer = new StringBuffer(); buffer.append("线程安全").append("的字符串构建");

3.3 字符串池与intern方法

java

String s1 = "Java"; // 使用字符串池 String s2 = new String("Java"); // 创建新对象 String s3 = s2.intern(); // 放入并返回池中引用 System.out.println(s1 == s2); // false System.out.println(s1 == s3); // true

3.4 正则表达式匹配

java

String email = "test@example.com"; String regex = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$"; // 检查是否匹配 boolean isValid = email.matches(regex); // 提取匹配内容 String text = "电话: 138-1234-5678, 备用: 139-8765-4321"; Pattern pattern = Pattern.compile("\\d{3}-\\d{4}-\\d{4}"); Matcher matcher = pattern.matcher(text); while (matcher.find()) { System.out.println("找到号码: " + matcher.group()); }

四、实战应用示例

4.1 数据验证工具类

java

public class StringValidator { // 验证邮箱格式 public static boolean isValidEmail(String email) { if (email == null || email.isBlank()) return false; String regex = "^[\\w.-]+@[\\w.-]+\\.\\w{2,}$"; return email.matches(regex); } // 验证手机号 public static boolean isValidPhone(String phone) { if (phone == null) return false; return phone.matches("1[3-9]\\d{9}"); } // 隐藏敏感信息 public static String maskSensitiveInfo(String input) { if (input == null || input.length() < 4) return input; return input.substring(0, 3) + "****" + input.substring(input.length() - 4); } }

4.2 字符串处理工具

java

public class StringProcessor { // 统计单词出现次数 public static Map<String, Integer> wordFrequency(String text) { Map<String, Integer> frequency = new HashMap<>(); if (text == null || text.isBlank()) return frequency; String[] words = text.toLowerCase() .replaceAll("[^a-z\\s]", "") .split("\\s+"); for (String word : words) { frequency.put(word, frequency.getOrDefault(word, 0) + 1); } return frequency; } // 判断是否为回文 public static boolean isPalindrome(String str) { if (str == null) return false; String cleaned = str.toLowerCase().replaceAll("[^a-z0-9]", ""); return new StringBuilder(cleaned) .reverse() .toString() .equals(cleaned); } }

五、常见陷阱与注意事项

  1. 不要用==比较字符串内容

    java

    String s1 = "hello"; String s2 = new String("hello"); System.out.println(s1 == s2); // false! System.out.println(s1.equals(s2)); // true
  2. 注意字符串拼接的性能

    java

    // 错误示例 - 在循环中使用+ String result = ""; for (int i = 0; i < 10000; i++) { result += "data"; // 性能极差! } // 正确示例 - 使用StringBuilder StringBuilder sb = new StringBuilder(); for (int i = 0; i < 10000; i++) { sb.append("data"); }
  3. 注意编码问题

    java

    // 指定字符编码 String str = new String(bytes, StandardCharsets.UTF_8); byte[] bytes = str.getBytes(StandardCharsets.UTF_8);

六、总结

Java的String API虽然基础,但功能强大且实用。掌握这些API不仅能提高编码效率,还能写出更优雅、更高效的代码。记住:

  • 理解不可变性:这是String设计的核心

  • 选择合适的方法:根据场景选择最合适的API

  • 注意性能:特别是在处理大量字符串时

  • 善用工具类:Apache Commons Lang、Guava等库提供了更多实用功能


本篇博客涵盖了Java String API的核心内容,适用于Java 8及以上版本。实际开发中,请根据具体版本选择可用的API。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 10:30:08

Open-AutoGLM接口兼容性问题全攻克,资深架构师总结的8条黄金法则

第一章&#xff1a;Open-AutoGLM跨应用操作Open-AutoGLM 是一个支持多应用协同的自动化语言模型集成框架&#xff0c;能够在异构系统间实现指令解析与任务调度。其核心能力在于通过统一接口调用不同应用程序的API&#xff0c;并基于自然语言输入生成可执行的操作序列。配置跨应…

作者头像 李华
网站建设 2026/4/3 15:28:40

Open-AutoGLM部署避坑指南:7个关键步骤让你一次成功

第一章&#xff1a;Open-AutoGLM部署概述Open-AutoGLM 是一个开源的自动化通用语言模型&#xff08;GLM&#xff09;部署框架&#xff0c;旨在简化大语言模型在生产环境中的集成与运维。该框架支持多种硬件平台和推理后端&#xff0c;提供模块化配置、自动扩缩容以及API网关集成…

作者头像 李华
网站建设 2026/3/25 5:35:34

WorkshopDL:如何快速下载Steam创意工坊模组?完整指南来了!

WorkshopDL&#xff1a;如何快速下载Steam创意工坊模组&#xff1f;完整指南来了&#xff01; 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为无法访问Steam创意工坊而烦…

作者头像 李华
网站建设 2026/4/2 1:59:06

告别显存焦虑!这个框架用CPU+GPU协同,70GB显存就能微调671B大模型

玩大模型的朋友们&#xff0c;想必都深有体会一个痛点&#xff1a;显存&#xff0c;永远的显存&#xff01;看着动辄几百上千亿参数的巨无霸模型&#xff0c;再看看自己那张“略显羞涩”的显卡&#xff0c;是不是感觉心有余而力不足&#xff1f;无论是推理部署还是微调训练&…

作者头像 李华
网站建设 2026/4/4 7:24:50

如何微调任何Embedding模型?适配器微调让通用模型秒变领域专家

还在为微调嵌入模型需要大量GPU资源而发愁&#xff1f;今天教你用LlamaIndex的Adapter适配器技术&#xff0c;无论是BGE、OpenAI还是其他任何Embedding模型&#xff0c;都能轻松微调&#xff0c;用普通电脑就能让通用模型适配你的专业领域&#xff01;引言&#xff1a;为什么需…

作者头像 李华