字符串处理最佳实践
# 字符串处理最佳实践
# 字符串截取
在 Java 中,可以使用 substring
方法来截取字符串。substring
方法有两个变种:
substring(int beginIndex)
:从指定索引(beginIndex
)开始截取字符串到末尾。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
2
3
4
5
6
7
8
9
10
11
12
13
14
# indexOf 方法
indexOf
方法用于查找【指定字符】或【子字符串】在字符串中第一次出现的位置。它有多个变种:
indexOf(int ch)
:返回指定字符第一次出现的索引。indexOf(int ch, int fromIndex)
:从指定索引(fromIndex
)开始,返回指定字符第一次出现的索引。indexOf(String str)
:返回指定子字符串第一次出现的索引。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
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
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
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
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
2
3
4
5
6
7
8
9
10
解析:
- 通过使用
split("/")
方法,路径字符串被按照斜杠(/
)进行分割,每个部分被存储到split
数组的相应索引位置。 - 注意,由于路径字符串以斜杠开头,因此分割后的数组的第一个元素是空字符串
""
。 - 通过分割结果,可以获取路径中的各个部分。
使用示例:
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
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
2、需要返回 yyyyMMdd 的数据,如下所示
20231113
20231119
1
2
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
2
3
4
5
6
7
8
# 方法二:字符串的替换
replaceAll
方法
String start = startDay.replaceAll("-", "");
String end = endDay.getEndDay().replaceAll("-", "");
1
2
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
2
3
4
5
上次更新: 2024/9/25 11:16:13