上一篇                     
               
			  Java如何截取字符串
- 后端开发
- 2025-06-20
- 2716
 在Java中,使用String类的substring()方法截取字符串,提供起始索引(包含)和可选结束索引(不包含),如str.substring(2,5),注意索引从0开始,且需避免越界异常。
 
在Java编程中,字符串截取是高频操作,用于提取子串、解析数据或格式化文本,核心方法是substring(),属于String类,设计时需注意索引规则和性能,以下是详细指南:
核心方法:substring()
String类提供两个重载方法:
-  单参数截取 substring(int beginIndex)- 从beginIndex开始截取到字符串末尾。
- 示例: String str = "Hello, World!"; String result = str.substring(7); // 从索引7开始 System.out.println(result); // 输出 "World!" 
 
- 从
-  双参数截取 substring(int beginIndex, int endIndex) - 截取[beginIndex, endIndex)区间(左闭右开)。
- 示例: String str = "Java Programming"; String result = str.substring(5, 16); // 索引5到15 System.out.println(result); // 输出 "Programming" 
 
- 截取
关键注意事项
-  索引规则 - 索引从0开始,最大值为字符串长度-1。
- 越界问题: 
    - 若索引为负数或超过长度,抛出StringIndexOutOfBoundsException。
- 安全做法:先校验索引 if (beginIndex >= 0 && endIndex <= str.length()) { str.substring(beginIndex, endIndex); }
 
- 若索引为负数或超过长度,抛出
 
- 索引从0开始,最大值为
-  不可变性 - 截取后返回新字符串,原字符串不变: String original = "Apple"; String sub = original.substring(0, 3); // "App" System.out.println(original); // 仍输出 "Apple" 
 
- 截取后返回新字符串,原字符串不变: 
其他截取方法
-  split() 分割字符串 
 按正则表达式拆分,适合提取特定部分: String data = "name=John;age=30"; String[] parts = data.split(";"); System.out.println(parts[0]); // 输出 "name=John"
-  StringTokenizer(旧版) 
 适用于简单分隔符场景(不推荐新项目使用):StringTokenizer tokenizer = new StringTokenizer("one,two,three", ","); while (tokenizer.hasMoreTokens()) { System.out.println(tokenizer.nextToken()); // 依次输出 "one" "two" "three" }
性能与安全建议
- 大字符串处理 
  - 避免对超大字符串(如文件内容)频繁截取,可能引发内存浪费,改用StringBuilder或流处理。
 
- 避免对超大字符串(如文件内容)频繁截取,可能引发内存浪费,改用
- 用户输入安全 截取用户输入时(如SQL、HTML),需先转义特殊字符,防止注入攻击。 
- 编码问题 
  - 含多字节字符(如中文)时,确保索引对齐字符边界,避免截断乱码: String chinese = "你好世界"; // 错误:可能截断中文字符 String safeSub = chinese.substring(0, 2); // "你好"(一个中文占2字节,但Java字符是UTF-16编码,一个字符是一个char) 
 
- 含多字节字符(如中文)时,确保索引对齐字符边界,避免截断乱码: 
实战示例
场景:提取URL中的域名

String url = "https://www.example.com/page";
// 步骤1:移除协议部分
int start = url.indexOf("://") + 3; // 索引跳到"www"开头
// 步骤2:找到第一个斜杠位置
int end = url.indexOf("/", start); 
// 步骤3:截取域名
String domain = (end == -1) ? url.substring(start) : url.substring(start, end);
System.out.println(domain); // 输出 "www.example.com" 
- 首选substring():精确控制截取范围,注意索引左闭右开。
- 避免越界:始终校验索引范围。
- 考虑性能:大文本用StringBuilder或Arrays.copyOfRange(字符数组截取)。
- 安全第一:处理外部输入时,结合安全库(如Apache Commons Text)过滤风险字符。
引用说明:
- Oracle官方文档:String.substring()
- 《Java核心技术卷I》(Cay S. Horstmann著)字符串操作章节
- 安全实践参考:OWASP Java安全指南
 
  
			