跳转至

Java 中 string.substring 方法详解

简介

在 Java 编程中,字符串处理是一项常见且重要的任务。String 类作为 Java 中处理字符串的核心类,提供了众多实用的方法,其中 substring 方法尤为常用。substring 方法允许我们从一个字符串中提取出部分内容,形成一个新的字符串。本文将详细介绍 string.substring 方法的基础概念、使用方法、常见实践以及最佳实践,帮助读者深入理解并高效使用该方法。

目录

  1. 基础概念
  2. 使用方法
  3. 常见实践
  4. 最佳实践
  5. 小结
  6. 参考资料

1. 基础概念

substring 方法是 String 类的一个实例方法,用于从一个字符串中截取指定范围的子字符串。该方法有两种重载形式: - public String substring(int beginIndex):返回一个从指定索引 beginIndex 开始到原字符串末尾的子字符串。 - public String substring(int beginIndex, int endIndex):返回一个从指定索引 beginIndex 开始(包含)到索引 endIndex 结束(不包含)的子字符串。

2. 使用方法

2.1 substring(int beginIndex) 方法

该方法接受一个整数参数 beginIndex,表示截取子字符串的起始位置。示例代码如下:

public class SubstringExample1 {
    public static void main(String[] args) {
        String str = "Hello, World!";
        // 从索引 7 开始截取子字符串
        String subStr = str.substring(7);
        System.out.println(subStr); // 输出: World!
    }
}

在上述代码中,我们调用 substring(7) 方法,从索引 7 开始截取子字符串,最终输出结果为 World!

2.2 substring(int beginIndex, int endIndex) 方法

该方法接受两个整数参数 beginIndexendIndex,分别表示截取子字符串的起始位置和结束位置。示例代码如下:

public class SubstringExample2 {
    public static void main(String[] args) {
        String str = "Hello, World!";
        // 从索引 7 开始,到索引 12 结束(不包含)截取子字符串
        String subStr = str.substring(7, 12);
        System.out.println(subStr); // 输出: World
    }
}

在上述代码中,我们调用 substring(7, 12) 方法,从索引 7 开始到索引 12 结束(不包含)截取子字符串,最终输出结果为 World

3. 常见实践

3.1 提取文件名和扩展名

在处理文件路径时,我们经常需要提取文件名和扩展名。可以使用 substring 方法来实现这一功能。示例代码如下:

public class FileNameAndExtension {
    public static void main(String[] args) {
        String filePath = "example.txt";
        int dotIndex = filePath.lastIndexOf('.');
        if (dotIndex != -1) {
            String fileName = filePath.substring(0, dotIndex);
            String fileExtension = filePath.substring(dotIndex + 1);
            System.out.println("文件名: " + fileName);
            System.out.println("扩展名: " + fileExtension);
        }
    }
}

在上述代码中,我们首先使用 lastIndexOf('.') 方法找到最后一个点号的索引,然后使用 substring 方法分别提取文件名和扩展名。

3.2 截取 URL 中的域名

在处理 URL 时,我们可能需要截取其中的域名部分。示例代码如下:

public class ExtractDomain {
    public static void main(String[] args) {
        String url = "https://www.example.com/path/to/page";
        int startIndex = url.indexOf("://") + 3;
        int endIndex = url.indexOf('/', startIndex);
        if (endIndex == -1) {
            endIndex = url.length();
        }
        String domain = url.substring(startIndex, endIndex);
        System.out.println("域名: " + domain);
    }
}

在上述代码中,我们首先找到 :// 的位置,然后从该位置向后 3 个字符开始查找第一个斜杠的位置,最后使用 substring 方法截取域名。

4. 最佳实践

4.1 边界检查

在使用 substring 方法时,需要确保传入的索引值在合法范围内,否则会抛出 StringIndexOutOfBoundsException 异常。示例代码如下:

public class BoundaryCheck {
    public static void main(String[] args) {
        String str = "Hello";
        int beginIndex = 2;
        int endIndex = 7;
        if (beginIndex >= 0 && endIndex <= str.length() && beginIndex <= endIndex) {
            String subStr = str.substring(beginIndex, endIndex);
            System.out.println(subStr);
        } else {
            System.out.println("索引值超出范围");
        }
    }
}

在上述代码中,我们在调用 substring 方法之前,先检查索引值是否合法,避免抛出异常。

4.2 避免频繁使用 substring

由于 substring 方法会创建新的字符串对象,频繁使用会导致内存开销增大。如果需要多次截取子字符串,可以考虑使用 StringBuilderStringBuffer 来提高性能。示例代码如下:

import java.util.StringJoiner;

public class PerformanceImprovement {
    public static void main(String[] args) {
        String str = "abcdefg";
        StringJoiner joiner = new StringJoiner(",");
        for (int i = 0; i < str.length(); i++) {
            joiner.add(str.substring(i, i + 1));
        }
        String result = joiner.toString();
        System.out.println(result);
    }
}

在上述代码中,我们使用 StringJoiner 来拼接子字符串,避免了频繁创建新的字符串对象。

5. 小结

string.substring 方法是 Java 中处理字符串的常用方法,它允许我们从一个字符串中截取指定范围的子字符串。通过本文的介绍,我们了解了 substring 方法的基础概念、使用方法、常见实践以及最佳实践。在使用该方法时,需要注意边界检查,避免频繁使用以提高性能。

6. 参考资料

  • 《Effective Java》(第三版)