本文目录导读:

- 使用 String.split() 方法(最常用)
- 使用 StringTokenizer 类(遗留类,但性能较好)
- 使用 Pattern 和 Matcher 类(正则表达式拆分)
- 使用第三方库 Apache Commons Lang
- 大数据量高性能拆分(使用流处理)
- 实际案例:CSV文件解析
- 性能对比与选择建议
在Java中实现数据拆分主要通过字符串的split()方法、StringTokenizer类、正则表达式以及第三方库(如Apache Commons Lang)来实现,以下是几种常见的数据拆分方案及代码案例:
使用 String.split() 方法(最常用)
public class SplitExample {
public static void main(String[] args) {
// 基础拆分:按逗号拆分
String data1 = "apple,banana,orange,grape";
String[] fruits = data1.split(",");
System.out.println("按逗号拆分:");
for (String fruit : fruits) {
System.out.println(fruit);
}
// 按空格拆分
String data2 = "Java Python C++ JavaScript";
String[] languages = data2.split(" ");
System.out.println("\n按空格拆分:");
for (String lang : languages) {
System.out.println(lang);
}
// 按多个分隔符拆分(使用正则表达式)
String data3 = "a|b,c.d e;f";
String[] items = data3.split("[|,.; ]");
System.out.println("\n按多个分隔符拆分:");
for (String item : items) {
System.out.println(item);
}
// 限制拆分数量
String data4 = "one,two,three,four";
String[] limited = data4.split(",", 3);
System.out.println("\n限制拆分数量为3:");
System.out.println("元素0: " + limited[0]); // one
System.out.println("元素1: " + limited[1]); // two
System.out.println("元素2: " + limited[2]); // three,four
}
}
使用 StringTokenizer 类(遗留类,但性能较好)
import java.util.StringTokenizer;
public class StringTokenizerExample {
public static void main(String[] args) {
// 基本使用
String data = "123-456-789-012";
StringTokenizer tokenizer = new StringTokenizer(data, "-");
System.out.println("使用StringTokenizer拆分:");
while (tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
// 多分隔符
String complexData = "a,b;c|d:e";
StringTokenizer multiToken = new StringTokenizer(complexData, ",;|:");
System.out.println("\n多分隔符拆分:");
while (multiToken.hasMoreTokens()) {
System.out.println(multiToken.nextToken());
}
}
}
使用 Pattern 和 Matcher 类(正则表达式拆分)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternSplitExample {
public static void main(String[] args) {
// 复杂正则拆分
String text = "User:123,Email:test@test.com,Phone:1234567890";
// 提取键值对
Pattern pattern = Pattern.compile("(\\w+):(\\w+[.,@]?\\w*)");
Matcher matcher = pattern.matcher(text);
System.out.println("使用正则提取键值对:");
while (matcher.find()) {
String key = matcher.group(1);
String value = matcher.group(2);
System.out.println(key + " = " + value);
}
// 使用Pattern.split()方法
String data = "apple123banana456orange";
Pattern numberPattern = Pattern.compile("\\d+");
String[] parts = numberPattern.split(data);
System.out.println("\n按数字拆分:");
for (String part : parts) {
System.out.println(part);
}
}
}
使用第三方库 Apache Commons Lang
// 需要引入依赖:org.apache.commons:commons-lang3
import org.apache.commons.lang3.StringUtils;
public class CommonsLangExample {
public static void main(String[] args) {
// 使用 StringUtils.split()
String data = " hello world java ";
String[] words = StringUtils.split(data);
System.out.println("使用StringUtils.split()(忽略空白):");
for (String word : words) {
System.out.println("[" + word + "]");
}
// 按指定字符拆分
String csvData = "a||b||c||d";
String[] parts = StringUtils.split(csvData, "||");
System.out.println("\n按||拆分:");
for (String part : parts) {
System.out.println(part);
}
}
}
大数据量高性能拆分(使用流处理)
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamSplitExample {
// 文件数据拆分
public static List<String[]> splitFileData(String filePath, String delimiter) {
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
return reader.lines()
.map(line -> line.split(delimiter))
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
// 流式拆分字符串
public static Stream<String> splitToStream(String data, String delimiter) {
return Stream.of(data.split(delimiter));
}
public static void main(String[] args) {
String data = "a,b,c,d,e,f,g,h,i,j";
System.out.println("使用流拆分并处理:");
List<String> result = splitToStream(data, ",")
.filter(s -> !s.equals("c")) // 过滤掉c
.map(String::toUpperCase) // 转大写
.collect(Collectors.toList());
System.out.println(result); // [A, B, D, E, F, G, H, I, J]
}
}
实际案例:CSV文件解析
public class CSVParser {
// 解析标准CSV行(处理引号内的逗号)
public static String[] parseCSVLine(String line) {
List<String> fields = new ArrayList<>();
StringBuilder currentField = new StringBuilder();
boolean inQuotes = false;
for (char c : line.toCharArray()) {
if (c == '"') {
inQuotes = !inQuotes;
} else if (c == ',' && !inQuotes) {
fields.add(currentField.toString().trim());
currentField = new StringBuilder();
} else {
currentField.append(c);
}
}
fields.add(currentField.toString().trim());
return fields.toArray(new String[0]);
}
public static void main(String[] args) {
String csvLine = "\"Smith, John\",35,\"123 Main St\",\"Engineer\"";
String[] parts = parseCSVLine(csvLine);
System.out.println("CSV行解析结果:");
for (int i = 0; i < parts.length; i++) {
System.out.println("字段" + i + ": " + parts[i]);
}
}
}
性能对比与选择建议
| 方法 | 适用场景 | 性能 | 特点 |
|---|---|---|---|
split() |
简单拆分,日常使用 | 中等 | 返回数组,使用方便 |
StringTokenizer |
高性能拆分 | 高 | 遗留类,不支持正则 |
Pattern/Matcher |
复杂拆分 | 中等 | 灵活的正则支持 |
| Commons Lang | 复杂场景 | 高 | 功能全面,稳定性好 |
| 流式处理 | 大数据量 | 依赖场景 | 链式操作,函数式风格 |
选择建议:
- 简单拆分:使用
String.split() - 性能要求高:使用
StringTokenizer或 Commons Lang - 需要正则处理:使用
Pattern/Matcher或String.split() - 处理大量数据:考虑使用流式处理和文件流
根据实际需求选择最合适的拆分方式即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播