Java字符串分割实操案例
基础split()方法使用
public class StringSplitDemo {
public static void main(String[] args) {
// 案例1:按逗号分割
String str1 = "苹果,香蕉,橙子,葡萄";
String[] fruits = str1.split(",");
System.out.println("按逗号分割:");
for (String fruit : fruits) {
System.out.println(" " + fruit);
}
// 案例2:按空格分割
String str2 = "Java Python C++ JavaScript";
String[] languages = str2.split(" ");
System.out.println("按空格分割:");
for (String lang : languages) {
System.out.println(" " + lang);
}
}
}
多种分割方式实战
public class SplitAdvancedDemo {
public static void main(String[] args) {
// 案例3:按多个分隔符分割
String str3 = "张三,男;25岁:北京|工程师";
String[] parts = str3.split("[,;:|]"); // 正则表达式匹配多个分隔符
System.out.println("按多个分隔符分割:");
for (String part : parts) {
System.out.println(" " + part);
}
// 案例4:限制分割次数
String str4 = "A,B,C,D,E,F";
String[] limited = str4.split(",", 3); // 最多分成3部分
System.out.println("\n限制分割次数(3次):");
for (String s : limited) {
System.out.println(" " + s);
}
// 案例5:处理空字符串
String str5 = "1,,2,,,3"; // 包含连续分隔符
String[] result = str5.split(",");
System.out.println("\n处理连续分隔符:");
for (String s : result) {
System.out.println(" '" + s + "'");
}
}
}
实际业务场景案例
public class BusinessSplitDemo {
public static void main(String[] args) {
// 案例6:解析URL参数
String url = "http://example.com/api?name=张三&age=25&city=北京";
String[] params = url.split("\\?")[1].split("&");
System.out.println("URL参数解析:");
for (String param : params) {
String[] kv = param.split("=");
System.out.println(" " + kv[0] + " = " + kv[1]);
}
// 案例7:CSV文件解析
String csvLine = "1001,张三,25,北京,工程师,15000";
String[] employee = csvLine.split(",");
System.out.println("\n员工信息:");
System.out.println(" ID: " + employee[0]);
System.out.println(" 姓名: " + employee[1]);
System.out.println(" 年龄: " + employee[2]);
System.out.println(" 城市: " + employee[3]);
System.out.println(" 职位: " + employee[4]);
System.out.println(" 薪资: " + employee[5]);
// 案例8:日志解析
String logEntry = "2024-01-15 10:30:45 [ERROR] 用户登录失败 - 用户名:admin";
String[] logParts = logEntry.split(" ");
System.out.println("\n日志解析:");
System.out.println(" 日期: " + logParts[0]);
System.out.println(" 时间: " + logParts[1]);
System.out.println(" 级别: " + logParts[2].replaceAll("[\\[\\]]", ""));
System.out.println(" 消息: " + logEntry.substring(logEntry.indexOf("]") + 2));
}
}
正则表达式高级分割
public class RegexSplitDemo {
public static void main(String[] args) {
// 案例9:按数字分割
String str9 = "abc123def456ghi789";
String[] parts = str9.split("\\d+");
System.out.println("按数字分割:");
for (String part : parts) {
System.out.println(" " + part);
}
// 案例10:保留分隔符(使用正向后顾)
String str10 = "张三,李四,王五,赵六";
String[] names = str10.split("(?<=,)"); // 在逗号后面分割但不消耗逗号
System.out.println("\n保留分隔符验证:");
for (String name : names) {
System.out.println(" " + name);
}
// 案例11:按空白字符和标点分割
String str11 = "Hello,World!How are you?I'm fine.";
String[] words = str11.split("[\\s,!.?]+");
System.out.println("\n按空白和标点分割:");
for (String word : words) {
System.out.println(" " + word);
}
}
}
性能优化与注意事项
public class SplitOptimizationDemo {
public static void main(String[] args) {
// 案例12:使用Pattern预编译(大量重复分割时)
String text = "a,b,c,d,e,f,g,h,i,j";
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile(",");
long startTime = System.nanoTime();
for (int i = 0; i < 10000; i++) {
String[] result = text.split(","); // 每次都要编译正则
}
long endTime = System.nanoTime();
System.out.println("不使用预编译耗时: " + (endTime - startTime) + "纳秒");
startTime = System.nanoTime();
for (int i = 0; i < 10000; i++) {
String[] result = pattern.split(text); // 使用预编译的Pattern
}
endTime = System.nanoTime();
System.out.println("使用预编译耗时: " + (endTime - startTime) + "纳秒");
// 案例13:处理特殊字符
String specialStr = "a.b.c.d"; // 点号是正则特殊字符
String[] dotParts = specialStr.split("\\."); // 需要转义
System.out.println("\n按点号分割:");
for (String part : dotParts) {
System.out.println(" " + part);
}
// 案例14:使用StringTokenizer(遗留类)
java.util.StringTokenizer st = new java.util.StringTokenizer("苹果 香蕉 橙子", " ");
System.out.println("\n使用StringTokenizer:");
while (st.hasMoreTokens()) {
System.out.println(" " + st.nextToken());
}
}
}
运行结果示例
按逗号分割:
苹果
香蕉
橙子
葡萄
按多个分隔符分割:
张三
男
25岁
北京
工程师
URL参数解析:
name = 张三
age = 25
city = 北京
员工信息:
ID: 1001
姓名: 张三
年龄: 25
城市: 北京
职位: 工程师
薪资: 15000
按数字分割:
abc
def
ghi
- 正则转义:使用转义特殊字符(如、、等)
- 性能优化:大量重复分割时使用
Pattern.compile()预编译 - 空字符串处理:连续分隔符会产生空字符串,注意处理
- 分割限制:使用
split(regex, limit)控制分割次数 - 特殊场景:需要保留分隔符时使用正向后顾/前瞻
通过这些案例,你可以掌握Java字符串分割的各种实际应用场景和技巧。
