1235854,1586389,8638\t56438,1687,18934,18935,02;56158,16257,12534,12535,03;
分隔符混合:逗號 ,、Tab \t、分號 ;。需求:提取 Tab 後第一個數、分號後第一個數、以及兩組特定數字對。
String raw = "1235854,1586389,8638\t56438,1687,18934,18935,02;56158,16257,12534,12535,03;";
// 1. 統一分隔符
String normalized = raw.replace("\t", ",").replace(";", ",");
// 2. 分割
String[] parts = normalized.split(",");
// 3. 提取(假設格式固定)
// 索引:0=1235854, 1=1586389, 2=8638, 3=56438, 4=1687, 5=18934, 6=18935, 7=02, 8=56158, 9=16257, 10=12534, 11=12535, 12=03
String tabAfterFirst = parts[3]; // 56438
String semiAfterFirst = parts[8]; // 56158
String pair1_a = parts[5]; // 18934
String pair1_b = parts[6]; // 18935
String pair2_a = parts[10]; // 12534
String pair2_b = parts[11]; // 12535
System.out.println("Tab後第一個: " + tabAfterFirst);
System.out.println("分號後第一個: " + semiAfterFirst);
System.out.println("第一組: " + pair1_a + ", " + pair1_b);
System.out.println("第二組: " + pair2_a + ", " + pair2_b);
若格式不完全固定,建議用 Regex 定義命名群組:
String regex = "(?<firstPart>\\d+),(?<secondPart>\\d+),(?<beforeTab>\\d+)\\t(?<afterTab>\\d+),(?<mid>[\\d,]+);(?<afterSemi>\\d+),(?<rest>[\\d,]+);";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(raw);
if (matcher.matches()) {
System.out.println("afterTab: " + matcher.group("afterTab"));
System.out.println("afterSemi: " + matcher.group("afterSemi"));
// mid 和 rest 再用逗號分割取特定位置
}
String.split() 參數是正則,分號 ; 無需轉義,但點號 .、管線 | 等需轉義。"\\t",讀取自檔案/資料庫則為實際 Tab 字元(\u0009)。ArrayIndexOutOfBoundsException。