【Java实用技术】字符串的截取用什么方法好?

简介: 【Java实用技术】字符串的截取用什么方法好?

1、必备字符串操作

我们将字符串操作分为下面6种:

  1. 基本操作方法
  2. 字符串判空、比较
  3. 字符串截取和拆分
  4. 字符串查找和替换
  5. 字符串和其他类型数据的转换
  6. 字符串拼接和格式化

今天我们来讲解第三节。


2、字符串截取和拆分

2.1 对于字符串截取的原生操作

//原生方法:publicString.substring(intbeginIndex, intendIndex)

问题:你能记得截取的部分包含开始索引还是包含结束索引?

如果你不能第一时间回答这个问题,说明你对原生方法使用不熟悉,在开发时候,你可能会查阅jdk文档,或者写测试方法验证。

这在日常开发中会浪费一定时间。

答案:结果中包含beginIndex,但是不包含endIndex


原生方法使用限制:使用前要判空,记住开始和结束索引是否包含在结果内。

特别麻烦的是,如果你要截取指定分割符之间的部分,需要再使用indexOf()方法获得索引,作为开始索引记得要加1。

代码如下:

Stringss="java_pandas.jpg";
if (ss!=null) {
Strings1=ss.substring(ss.indexOf("_") +1, ss.indexOf("."));
}


2.2 推荐字符串截取操作

Apache工具类StringUtils.substringXX()

优势:不用担心字符串为null(空),方法名直白。

推荐常用方法:

// 截取字符串2个字符中间的字符串publicstaticStringsubstringBetween(Stringstr, Stringopen, Stringclose)
// 截取指定分割符后面的部分publicstaticStringsubstringAfterLast (Stringstr, Stringseparator)
// 截取指定分割符前面的部分publicstaticStringsubstringBeforeLast (Stringstr, Stringseparator)

对于substringBetween方法,结果就是不包含开始和结束分割符的部分,这也很符合一般的操作思维。


对于上面提到的一个截取特定分割符之间的部分,可以一行代码搞定。

Stringss="java_pandas.jpg";
Strings2=StringUtils.substringBetween(ss, "_", ".");

开发中比较常见的需求是截取某个特定分割符之间的字符串,又或者是截取特定分割符前(后)的字符串。

这些在工具类中直接调用,比自己写方法要方便很多。


3、demo用例

 

importorg.apache.commons.lang3.StringUtils;
/*** Java实用技术手册 By Pandas。* JDK版本:jdk1.8.0_66** @author Pandas* @date 2021/10/7*/publicclassStringSub {
/*** 截取字符串方法用哪个?*/publicstaticvoidmain(String[] args) {
Stringss="java_pandas.jpg";
System.out.println("*** String原生substring方法 ***");
// 对下划线和句号之间内容截取if (ss!=null) {
Strings1=ss.substring(ss.indexOf("_") +1, ss.indexOf("."));
System.out.println(s1);
        }
System.out.println("*** StringUtils 方法 *****");
Strings2=StringUtils.substringBetween(ss, "_", ".");
System.out.println(s2);
// 获取文件后缀名Stringpostfix=StringUtils.substringAfterLast(ss, ".");
StringfileName=StringUtils.substringBeforeLast(ss, ".");
System.out.println("文件名:"+fileName);
System.out.println("文件后缀:"+postfix);
    }
}
/** 运行结果===>*** String原生substring方法 ***pandas*** StringUtils 方法 *****pandas文件名:java_pandas文件后缀:jpg*/

 

4、总结

非必要情况下不要使用原生的substring方法,请直接使用StringUtils.substringXX()


是不是感觉前2期都比较简单?

现在是热身操作,后面会有更复杂的高阶技巧等着你。

欢迎阅读本期内容,希望对新入行的你有帮助。

过目不忘本领.jpg


我是Pandas,专注Java编程实用技术分享,公众号Java实用技术手册和B站均有视频解说,欢迎来玩。

如果你觉得这篇文章有用,别忘了点赞+关注,一起进步!

相关文章
|
10天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
49 4
|
11天前
|
JSON 前端开发 JavaScript
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
24 1
|
14天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
24 2
|
16天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
30 3
|
16天前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
10 2
|
16天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
16 1
|
16天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
31 1
|
16天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
|
8天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
4天前
|
安全 Java 开发者
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
21 9