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

Java如何截取字符串

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

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


核心方法:substring()

String类提供两个重载方法:

  1. 单参数截取

    substring(int beginIndex)

    Java如何截取字符串 第1张

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

    substring(int beginIndex, int endIndex)

    • 截取[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); }
    • 不可变性

      • 截取后返回新字符串,原字符串不变: 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(旧版)

          适用于简单分隔符场景(不推荐新项目使用):

          Java如何截取字符串 第2张

          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():精确控制截取范围,注意索引左闭右开。
        • 避免越界:始终校验索引范围。
        • 考虑性能:大文本用StringBuilder或Arrays.copyOfRange(字符数组截取)。
        • 安全第一:处理外部输入时,结合安全库(如Apache Commons Text)过滤风险字符。

        引用说明

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

        Java如何截取字符串 第3张

0