Java中字符串截取方法详解及实际应用小结

 更新时间:2024年12月09日 11:00:06   作者:非洲it高手  
java中截取字符串的常用方法是使用String类的substring方法,本文通过实例代码给大家介绍Java中字符串截取方法详解及实际应用小结,感兴趣的朋友跟随小编一起看看吧

java中,截取字符串的常用方法是使用String类的substring方法。除了substring方法,Java中还有其他方法可以用来截取字符串,虽然这些方法可能不如substring直接,但在某些情况下可能会更灵活或适合特定需求。例如:正则表达式、split方法、StringBuilderStringBuffer类、第三方库Apache Commons Lang、StringTokenizer类。

使用String类的substring方法。

substring方法有两个重载版本:

substring(int beginIndex): 从指定的起始索引开始截取到字符串的末尾。

substring(int beginIndex, int endIndex): 从指定的起始索引开始截取到指定的结束索引(不包括结束索引)。

下面是一些示例代码,展示了如何使用这两个方法:

public class SubstringExample {
    public static void main(String[] args) {
        String str = "Hello, World!";
        // 截取从索引7开始到字符串末尾的子字符串
        String substr1 = str.substring(7);
        System.out.println("Substring from index 7 to end: " + substr1); // 输出: "World!"
        // 截取从索引0开始到索引5(不包括5)的子字符串
        String substr2 = str.substring(0, 5);
        System.out.println("Substring from index 0 to 5: " + substr2); // 输出: "Hello"
        // 截取从索引7开始到索引12(不包括12)的子字符串
        String substr3 = str.substring(7, 12);
        System.out.println("Substring from index 7 to 12: " + substr3); // 输出: "World"
    }
}

详细解释

substring(int beginIndex):

String substr1 = str.substring(7);

从索引7开始截取到字符串的末尾。输出结果为"World!"

substring(int beginIndex, int endIndex):

String substr2 = str.substring(0, 5);

从索引0开始截取到索引5(不包括5)。

输出结果为"Hello"

String substr3 = str.substring(7, 12);

从索引7开始截取到索引12(不包括12)。

输出结果为"World"

注意事项

  • 索引从0开始计数。
  • beginIndex必须大于等于0,且小于等于字符串的长度。
  • endIndex必须大于等于beginIndex,且小于等于字符串的长度。
  • 如果索引超出范围,会抛出StringIndexOutOfBoundsException异常。

示例代码的输出

运行上述代码,输出结果如下:

Substring from index 7 to end: World!
Substring from index 0 to 5: Hello
Substring from index 7 to 12: World

以下是一些替代方法:

除了substring方法,Java中还有其他方法可以用来截取字符串,虽然这些方法可能不如substring直接,但在某些情况下可能会更灵活或适合特定需求。

使用正则表达式

正则表达式可以用来匹配和提取字符串的特定部分。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
    public static void main(String[] args) {
        String str = "Hello, World!";
        // 使用正则表达式提取"World"
        Pattern pattern = Pattern.compile("World");
        Matcher matcher = pattern.matcher(str);
        if (matcher.find()) {
            String match = matcher.group();
            System.out.println("Matched substring: " + match); // 输出: "World"
        }
    }
}

使用String的split方法

split方法可以根据指定的分隔符将字符串分割为多个子字符串,然后可以选择需要的部分。

public class SplitExample {
    public static void main(String[] args) {
        String str = "Hello, World!";
        // 使用逗号和空格作为分隔符分割字符串
        String[] parts = str.split(", ");
        // 提取第二部分
        if (parts.length > 1) {
            String part = parts[1];
            System.out.println("Second part: " + part); // 输出: "World!"
        }
    }
}

使用StringBuilder或StringBuffer

在某些情况下,你可能需要对字符串进行更多的操作,如删除或替换字符,可以使用StringBuilderStringBuffer类。

public class StringBuilderExample {
    public static void main(String[] args) {
        String str = "Hello, World!";
        // 创建一个StringBuilder对象
        StringBuilder sb = new StringBuilder(str);
        // 删除从索引0到索引7(不包括7)的部分
        sb.delete(0, 7);
        // 将结果转换为字符串
        String result = sb.toString();
        System.out.println("Resulting string: " + result); // 输出: "World!"
    }
}

使用Apache Commons Lang库

如果你可以使用第三方库,Apache Commons Lang提供了更丰富的字符串操作方法。

import org.apache.commons.lang3.StringUtils;
public class ApacheCommonsExample {
    public static void main(String[] args) {
        String str = "Hello, World!";
        // 使用Apache Commons Lang库的substring方法
        String substr = StringUtils.substring(str, 7, 12);
        System.out.println("Substring using Apache Commons: " + substr); // 输出: "World"
    }
}

使用StringTokenizer

StringTokenizer类可以用来分割字符串,尽管它现在已经不推荐使用,但在某些旧代码中可能会见到。

import java.util.StringTokenizer;
public class StringTokenizerExample {
    public static void main(String[] args) {
        String str = "Hello, World!";
        // 使用逗号和空格作为分隔符
        StringTokenizer tokenizer = new StringTokenizer(str, ", ");
        // 跳过第一部分
        if (tokenizer.hasMoreTokens()) {
            tokenizer.nextToken();
        }
        // 提取第二部分
        if (tokenizer.hasMoreTokens()) {
            String part = tokenizer.nextToken();
            System.out.println("Second part using StringTokenizer: " + part); // 输出: "World!"
        }
    }
}

字符串的截取和操作一些常见的场景和用途:

数据清洗和预处理

在处理数据时,特别是从文件、数据库或网络获取的数据,常常需要对字符串进行清洗和预处理。例如:

  • 从日志文件中提取特定信息。
  • 从用户输入中提取和验证数据。
  • 处理和规范化文本数据,如去除前后空格、转换大小写等。

搜索和替换

字符串搜索和替换是非常常见的操作,例如:

  • 在文档中查找和替换特定的单词或短语。
  • 在代码中查找并替换变量名或函数名。
  • 在配置文件中更新设置值。

解析和处理

从复杂的字符串中解析出有用的信息,例如:

  • 解析URL和查询参数。
  • 处理CSV或其他分隔符格式的文件。
  • 解析和处理JSON或XML字符串。

安全和验证

在用户输入和数据传输中,字符串操作可以用于安全和验证,例如:

  • 验证电子邮件地址、电话号码等格式。
  • 过滤和转义特殊字符以防止SQL注入或XSS攻击。
  • 解析和验证JWT(JSON Web Tokens)等认证信息。

示例代码

以下是一些具体的示例,展示字符串截取和操作在不同场景中的应用:

示例1:从URL中提取域名

public class URLParser {
    public static void main(String[] args) {
        String url = "https://www.example.com/path?query=123";
        // 提取协议
        String protocol = url.substring(0, url.indexOf(":"));
        System.out.println("Protocol: " + protocol); // 输出: "https"
        // 提取域名
        int start = url.indexOf("://") + 3;
        int end = url.indexOf("/", start);
        String domain = url.substring(start, end);
        System.out.println("Domain: " + domain); // 输出: "www.example.com"
    }
}

示例2:格式化日期字符串

import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatExample {
    public static void main(String[] args) {
        Date date = new Date();
        // 使用SimpleDateFormat格式化日期
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = formatter.format(date);
        System.out.println("Formatted Date: " + formattedDate); // 输出: 当前日期和时间
    }
}

示例3:验证电子邮件地址

public class EmailValidator {
    public static void main(String[] args) {
        String email = "user@example.com";
        // 使用简单的正则表达式验证电子邮件地址
        boolean isValid = email.matches("^[A-Za-z0-9+_.-]+@(.+)$");
        System.out.println("Is valid email: " + isValid); // 输出: true
    }
}

示例4:解析CSV字符串

public class CSVParser {
    public static void main(String[] args) {
        String csv = "John,Doe,30,New York";
        // 使用split方法解析CSV字符串
        String[] parts = csv.split(",");
        for (String part : parts) {
            System.out.println(part);
        }
        // 输出:
        // John
        // Doe
        // 30
        // New York
    }
}

到此这篇关于Java中字符串截取方法详解及实际应用的文章就介绍到这了,更多相关java字符串截取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot整合JPA详细代码实例

    SpringBoot整合JPA详细代码实例

    这篇文章主要给大家介绍了关于SpringBoot整合JPA的相关资料,JPA(Java Persistence API)是Sun官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据,需要的朋友可以参考下
    2024-05-05
  • 关于分布式锁(Redisson)的原理分析

    关于分布式锁(Redisson)的原理分析

    这篇文章主要介绍了关于分布式锁(Redisson)的原理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • SpringBoot依赖和代码分开打包的实现步骤

    SpringBoot依赖和代码分开打包的实现步骤

    本文主要介绍了SpringBoot依赖和代码分开打包的实现步骤,,这种方法将依赖和代码分开打包,一般更新只有代码修改,Pom文件是不会经常改动的,感兴趣的可以了解一下
    2023-10-10
  • SpringBoot + Mybatis增删改查实战记录

    SpringBoot + Mybatis增删改查实战记录

    这篇文章主要给大家介绍了关于SpringBoot + Mybatis增删改查的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • MyBatis的配置对象Configuration作用及说明

    MyBatis的配置对象Configuration作用及说明

    MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对象负责管理MappedStatement、创建核心组件、提供配置信息的访问接口以及作为插件机制的入口
    2025-03-03
  • Spring整合Junit的使用详解

    Spring整合Junit的使用详解

    这篇文章主要介绍了Spring整合Junit的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Java CAS操作与Unsafe类详解

    Java CAS操作与Unsafe类详解

    这篇文章主要介绍了Java CAS操作与Unsafe类的相关资料,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-02-02
  • Spring循环依赖的解决方法

    Spring循环依赖的解决方法

    Spring循环依赖是指两个或多个Bean相互依赖,形成闭环,Spring通过三级缓存机制默认支持setter注入的循环依赖,但不支持constructor注入的循环依赖(会抛异常),本文介绍Spring循环依赖的解决方法,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • java中几种常见的排序算法总结

    java中几种常见的排序算法总结

    大家好,本篇文章主要讲的是java中几种常见的排序算法总结,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • java实现简易版图形界面计算器

    java实现简易版图形界面计算器

    这篇文章主要为大家详细介绍了java实现简易版图形界面计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05

最新评论