2014-09-30 90 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+");