2014-09-30 75 views
0

我以前見過一個例子,但是又無法找到如何使用正則表達式將固定長度的數據流拆分爲數組的問題。這實際上是可能的嗎,是這樣的,有沒有人有一個基本的例子?Java - 正則表達式固定長度拆分成數組

 08/14  1351 XMGYV4  AOUSC    LTC      .000   .000 VDPJU01PMP 11AUG14:15:17:05.99 

我想將每個值存儲到一個數組中的分隔值而不使用子字符串。

+3

'String [] array = s.split(「\\ s +」);' – Krayo 2014-09-30 14:01:19

回答

0

需要以這種情況下的一個或更多次,即匹配正則表達式的與空白字符「\ S」

String input = " 08/14  1351 XMGYV4  AOUSC    LTC      .000   .000 VDPJU01PMP 11AUG14:15:17:05.99  "; 
String[] split = input.split("\\s+"); 
System.out.println(Arrays.toString(split)); 
+2

通常StackOverflow用戶喜歡看到一些解釋以及代碼答案。你能提供更多的信息來改善這個答案嗎? – jakerella 2014-09-30 15:07:13

+0

現在持有好了。請現在投票:) – 2014-09-30 15:17:44

1

的問題是,不存在用於每列沒有固定的字段大小。 因此,需要在枚舉的單個寬度上進行匹配。

String s = " 08/14  1351 XMGYV4  " 
     + "AOUSC    LTC      .000   .000 " 
     + "VDPJU01PMP 11AUG14:15:17:05.99  "; 
    Pattern pattern = Pattern.compile("(.{7,7})(.{11,11})(.)(.{12,12})(.{18,18})(.*)"); 
    Matcher m = pattern.matcher(s); 
    if (m.matches()) { 
     for (int i = 1; i <= m.groupCount(); ++i) { 
      String g = m.group(i); 
      System.out.printf("[%d] %s%n", i, g); 
     } 
    } 

這就好比最小和最大7個字符的(.{7,7})基團的列表。

0

也許考慮Krayo的解決方案String[] array = s.split("\\s+");