沉梦听雨的编程指南 沉梦听雨的编程指南
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • RPC
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 多媒体框架
  • 虚拟机
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • 开发工具篇

  • 工具库篇

  • 开发技巧篇

    • 常见数据校验注解
    • 字符串拼接的5种方式
    • 遍历集合的N种方式
    • 集合使用注意事项总结
    • 字符串处理最佳实践
      • 字符串截取
      • indexOf 方法
      • 字符串连接
      • 字符串替换
      • 字符串分割
      • 字符串大小写转换
      • 截取 URL 路径⭐️
      • 时间字符串格式化
        • 需求分析
        • 解决方法
        • 方法一:转成 Date 类型处理
        • 方法二:字符串的替换
        • 方法三:字符串截取
    • 时间字段处理小记
    • Curl用法解析
    • 列表分页的两种实现方案
    • HashMap根据value获取key
    • Map的7种遍历方式
    • 正则表达式
    • 二维码扫码登录学习
    • 脱敏最佳实践
    • 实时汇率获取
    • System-getProperty方法获取属性
    • 文件url转Base64编码
  • 工具类系列

  • 随笔

  • 开发日常
  • 开发技巧篇
沉梦听雨
2023-11-17
目录

字符串处理最佳实践

# 字符串处理最佳实践

# 字符串截取

在 Java 中,可以使用 substring 方法来截取字符串。substring 方法有两个变种:

  1. substring(int beginIndex):从指定索引(beginIndex)开始截取字符串到末尾。
  2. substring(int beginIndex, int endIndex):从指定索引(beginIndex)开始截取字符串,直到指定的结束索引(endIndex)之前。

示例:

// 索引从 0 开始,空格也占一个索引
String str = "Hello, World!";

// 从索引 7 开始截取到末尾(包含索引 7)
String substring1 = str.substring(7);
System.out.println(substring1);  // 输出: World!

// 从索引 0 开始截取到索引 5(不包含索引 5)
String substring2 = str.substring(0, 5);
System.out.println(substring2);  // 输出: Hello

// 截取字符串后 8 位,如果字符串长度小于8位,将返回整个字符串
String str = "12345678901234567890";
String last8Chars = str.substring(Math.max(str.length() - 8, 0));
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# indexOf 方法

indexOf 方法用于查找【指定字符】或【子字符串】在字符串中第一次出现的位置。它有多个变种:

  1. indexOf(int ch):返回指定字符第一次出现的索引。
  2. indexOf(int ch, int fromIndex):从指定索引(fromIndex)开始,返回指定字符第一次出现的索引。
  3. indexOf(String str):返回指定子字符串第一次出现的索引。
  4. indexOf(String str, int fromIndex):从指定索引(fromIndex)开始,返回指定子字符串第一次出现的索引。

示例:

           // 0123456789
String str = "Hello, World!";

// 查找字符 'W' 第一次出现的索引
int index1 = str.indexOf('W');
System.out.println(index1);  // 输出: 7

// 从索引 8 开始查找字符 'o' 第一次出现的索引
int index2 = str.indexOf('o', 8);
System.out.println(index2);  // 输出: 8

// 查找子字符串 "World" 第一次出现的索引
int index3 = str.indexOf("World");
System.out.println(index3);  // 输出: 7

// 从索引 8 开始查找子字符串 "o" 第一次出现的索引
int index4 = str.indexOf("o", 8);
System.out.println(index4);  // 输出: 8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 字符串连接

参考笔者这篇文章:字符串拼接的5种方式 | DreamRain (opens new window)

# 字符串替换

使用 replace 方法替换字符串中的特定字符或子字符串。

示例:

String original = "Hello, Java!";
String replaced = original.replace("Java", "World");
System.out.println(replaced);  // 输出: Hello, World!
1
2
3

# 字符串分割

使用 split 方法根据【指定的正则表达式】或者【普通字符串】将字符串分割成数组。

Java 8 及更高版本的 String 类也提供了一个重载的 split 方法,可以直接传入普通字符串作为分隔符。

示例:

String sentence = "This is a sample sentence.";
// String[] words = sentence.split(" "); // 使用空格作为分隔符
String[] words = sentence.split("\\s+"); // 用正则表达式
for (String word : words) {
    System.out.println(word);
}
// 输出:
// This
// is
// a
// sample
// sentence.
1
2
3
4
5
6
7
8
9
10
11
12

应用场景:如分割 url 路径。

# 字符串大小写转换

使用 toUpperCase 和 toLowerCase 方法将字符串转换为大写或小写。

示例:

String original = "Hello, World!";
// 转大写
String uppercase = original.toUpperCase();
// 转小写
String lowercase = original.toLowerCase();
System.out.println(uppercase);  // 输出: HELLO, WORLD!
System.out.println(lowercase);  // 输出: hello, world!
1
2
3
4
5
6
7

# 截取 URL 路径⭐️

String path = "/cmty256/imgs-blog@main/basics/image.6dq3ukh3y9k0.webp";

String[] split = path.split("/");

// 分割后的数据
split[0] = ""
split[1] = "cmty256"
split[2] = "imgs-blog@main"
split[3] = "basics"
split[4] = "image.6dq3ukh3y9k0.webp"
1
2
3
4
5
6
7
8
9
10

解析:

  1. 通过使用 split("/") 方法,路径字符串被按照斜杠(/)进行分割,每个部分被存储到 split 数组的相应索引位置。
  2. 注意,由于路径字符串以斜杠开头,因此分割后的数组的第一个元素是空字符串 ""。
  3. 通过分割结果,可以获取路径中的各个部分。

使用示例:

String path = "/cmty256/imgs-blog@main/basics/image.6dq3ukh3y9k0.webp";
String[] split = path.split("/");

// 1、利用分割
String name = split[1]; // 结果为:cmty256
String path1 = path.replace("/" + name, ""); // 结果为:/imgs-blog@main/basics/image.6dq3ukh3y9k0.webp

// 2、利用索引截取,如果数组 1 的元素是固定的,可以这样写
int startIndex = path.indexOf("/cmty256/");
if (startIndex != -1) {
    String path2 = path.substring(startIndex); // 结果为:/cmty256/imgs-blog@main/basics/image.6dq3ukh3y9k0.webp
    System.out.println(path2);
} else {
    // 判断的作用是防止 StringIndexOutOfBoundsException 异常,要根据实际开发场景使用
    // 这个判断在此处其实可以不用写,因为这里的startIndex不可能是负数,/cmty256/就是子字符串,一定能获取到索引
    System.out.println("未找到指定的字符串");
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 时间字符串格式化

# 需求分析

1、假设现在有两个时间

    String startDay = "2023-11-13";
    String endDay = "2023-11-19";
1
2

2、需要返回 yyyyMMdd 的数据,如下所示

20231113
20231119
1
2

# 解决方法

去除 - 号

# 方法一:转成 Date 类型处理

    SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat outputFormat = new SimpleDateFormat("yyyyMMdd");

    Date date1 = inputFormat.parse(startDay);
    Date date2 = inputFormat.parse(endDay);

    String start = outputFormat.format(date1);
    String end = outputFormat.format(date2);
1
2
3
4
5
6
7
8

# 方法二:字符串的替换

replaceAll 方法

    String start = startDay.replaceAll("-", "");
    String end = endDay.getEndDay().replaceAll("-", "");
1
2

# 方法三:字符串截取

如果你确定输入日期字符串的格式是固定的,并且总是符合 "yyyy-MM-dd" 的格式,可以使用字符串的截取方法来实现:

String formattedStart = startDay.substring(0, 4) + startDay.substring(5, 7) + startDay.substring(8, 10);
System.out.println(formattedStart); // 输出:20231113

String formattedEnd = endDay.substring(0, 4) + endDay.substring(5, 7) + endDay.substring(8, 10);
System.out.println(formattedEnd); // 输出:20231119
1
2
3
4
5
上次更新: 2024/9/25 11:16:13
集合使用注意事项总结
时间字段处理小记

← 集合使用注意事项总结 时间字段处理小记→

Theme by Vdoing | Copyright © 2023-2025 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式