2011-08-11 46 views
3

的第一次出现比方说,我有一个字符串,foo,由空格分隔值:正则表达式:跳过模式

  • [value 1] [value 2] [value 3] ... [value n]

将正则表达式是split(...)foo什么,这样生成的字符串数组包含除value 1之外的所有值?这甚至有可能吗?

这里是我迄今:

  • String[] array = foo.split("\\s");

而这还不是很多,我知道了。


编辑:

我期待通过正则表达式纯粹做到这一点。如果这是不可能的,请让我知道!

+0

您可以根据您的正则表达式将字符串拆分成几部分。 –

+0

@DeathMagus,对,但我希望有一种优雅的方式来使用正则表达式排除第一个值。 – mre

+0

你总是可以忽略第一场比赛。 – dlev

回答

3

将字符串拆分为值数组后,循环访问数组并执行所需操作,跳过第一次迭代。

for(i=1; i<array.count(); i++){ 
    //Act on the data value 
} 
+2

没有冒犯,但这是痛苦的明显。我不想实施这样的解决方案。如果可能的话,我希望能够通过正则表达式来完成此操作。 – mre

+0

@mre:那么应该在原始问题中说明。 –

+0

@Evan Mulawski,是的。试着再次阅读这个问题,不要轻视它。 – mre

2

定界符可能是“无论是一个空白序列或在一个字符串的开头非WS的块,但是这让你在前面一个空字符串:

Arrays.toString("abc def ghi jkl".split("\\s+|^\\S+\\s+")) 

产生

[,def,ghi] 

即与split问题 - 你会,我想,总是得到东西在阵列的开始处。不幸的是,我认为你需要在分割之前将字符串切断,或者使用Java的Arrays.copyOfRange()或类似的后处理。

下探开始可以用replaceFirst做到:

import java.util.Arrays; 
public class SplitExample { 

    public static final String data = "abc def ghi"; 
    public static void main(String[] args) { 
     System.out.println(Arrays.toString(data.split("\\s+"))); 
     System.out.println(Arrays.toString(data.split("\\s+|^\\S+\\s+"))); 
     System.out.println(Arrays.toString(data.replaceFirst("^\\S+\\s+", "").split("\\s+"))); 
    } 
} 

的最后一行是尽可能接近我可以得到的,因为split产生匹配AROUND您的分隔符。如何避免前面的空白字符串与单个拆分?我不知道有没有办法......

0

你能做到这一点吗?

String[] array = foo.split("\\S*\\s")[1].split("\\s"); 

这是2正则表达式的分裂,而不是一个,但它比后来循环整洁。我不确定它是否正确,但它应该首先将字符串分隔成“任意数量的非空白字符后跟一个空格”以及其他所有内容。然后你可以用空格分割所有的东西,并且你将剩下一个不包含第一个元素的数组。

编辑:是的,它不能做一个单独的分割,因为除了“”作为你的数组中的第一个元素以外的任何东西的唯一方法是有你没有删除的东西在字符串的前面。

0

由于共识似乎是,这是不可能的,我提出这个解决方案:

假设你只有一个空间,在“垃圾”值,

int ix = theString.indexOf(" "); 
ix = theString.indexOf(" ", ix); 
theString.substring(ix + 1).split("\\s"); 

这从获得的子字符串中的第二个空格(“垃圾”值中空格之后的第一个空格)然后将其分开。