首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 字串分割進階:混合分隔符(逗號、Tab、分號)解析與提取

     編輯:程式設計疑難解答

資料格式範例

1235854,1586389,8638\t56438,1687,18934,18935,02;56158,16257,12534,12535,03;

分隔符混合:逗號 ,、Tab \t、分號 ;。需求:提取 Tab 後第一個數、分號後第一個數、以及兩組特定數字對。

解決策略:統一分隔符再分割

  1. 將 Tab、分號替換為逗號。
  2. 用逗號分割成陣列。
  3. 按索引或規則提取目標值。

完整程式碼

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() 參數是正則,分號 ; 無需轉義,但點號 .、管線 | 等需轉義。
  • Tab 字元在 Java 字串字面值中寫作 "\\t",讀取自檔案/資料庫則為實際 Tab 字元(\u0009)。
  • 分割後陣列長度需檢查,避免 ArrayIndexOutOfBoundsException。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved