当前位置:首页 > 后端开发 > 正文

Java如何截取字符串

在Java中,使用String类的substring()方法截取字符串,提供起始索引(包含)和可选结束索引(不包含),如str.substring(2,5),注意索引从0开始,且需避免越界异常。

在Java编程中,字符串截取是高频操作,用于提取子串、解析数据或格式化文本,核心方法是substring(),属于String类,设计时需注意索引规则和性能,以下是详细指南:


核心方法:substring()

String类提供两个重载方法:

  1. 单参数截取
    substring(int beginIndex)

    • beginIndex开始截取到字符串末尾。
    • 示例:
      String str = "Hello, World!";
      String result = str.substring(7);  // 从索引7开始
      System.out.println(result);        // 输出 "World!"
  2. 双参数截取
    substring(int beginIndex, int endIndex)

    Java如何截取字符串  第1张

    • 截取[beginIndex, endIndex)区间(左闭右开)。
    • 示例:
      String str = "Java Programming";
      String result = str.substring(5, 16); // 索引5到15
      System.out.println(result);           // 输出 "Programming"

关键注意事项

  1. 索引规则

    • 索引从0开始,最大值为字符串长度-1
    • 越界问题
      • 若索引为负数或超过长度,抛出StringIndexOutOfBoundsException
      • 安全做法:先校验索引
        if (beginIndex >= 0 && endIndex <= str.length()) {
            str.substring(beginIndex, endIndex);
        }
  2. 不可变性

    • 截取后返回新字符串,原字符串不变:
      String original = "Apple";
      String sub = original.substring(0, 3); // "App"
      System.out.println(original);          // 仍输出 "Apple"

其他截取方法

  1. split() 分割字符串
    按正则表达式拆分,适合提取特定部分:

    String data = "name=John;age=30";
    String[] parts = data.split(";"); 
    System.out.println(parts[0]); // 输出 "name=John"
  2. StringTokenizer(旧版)
    适用于简单分隔符场景(不推荐新项目使用):

    StringTokenizer tokenizer = new StringTokenizer("one,two,three", ",");
    while (tokenizer.hasMoreTokens()) {
        System.out.println(tokenizer.nextToken()); // 依次输出 "one" "two" "three"
    }

性能与安全建议

  1. 大字符串处理
    • 避免对超大字符串(如文件内容)频繁截取,可能引发内存浪费,改用StringBuilder或流处理。
  2. 用户输入安全

    截取用户输入时(如SQL、HTML),需先转义特殊字符,防止注入攻击。

  3. 编码问题
    • 含多字节字符(如中文)时,确保索引对齐字符边界,避免截断乱码:
      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():精确控制截取范围,注意索引左闭右开。
  • 避免越界:始终校验索引范围。
  • 考虑性能:大文本用StringBuilderArrays.copyOfRange(字符数组截取)。
  • 安全第一:处理外部输入时,结合安全库(如Apache Commons Text)过滤风险字符。

引用说明

  • Oracle官方文档:String.substring()
  • 《Java核心技术卷I》(Cay S. Horstmann著)字符串操作章节
  • 安全实践参考:OWASP Java安全指南
0