2013-08-30 140 views
1

我有一个像分割使用多个分隔符在Java中的字符串

String myString = "hello world~~hello~~world" 

字符串我使用的分割方法是这样

String[] temp = myString.split("~|~~|~~~"); 

我想要的阵列温度只包含隔开的字符串〜,~~或~~~。

但是,因此创建的临时数组的长度为5,另外2个“字符串”为空字符串。

我希望它只包含我的非空字符串。请帮忙。谢谢!

+0

请格式化您的代码与相应的标记为了可读性:http://stackoverflow.com/editing-help#code –

+0

对不起,我会关注:) –

回答

8

你应该用的量词与你的性格:

String[] temp = myString.split("~+"); 

String#split()需要一个正则表达式。 ~+将匹配1个或多个~,因此它将分割为~~~~~~等等。

String[] temp = myString.split("~{1,3}"); 

另外,如果只是要分割上~~~,或~~~,则可以通过使用{m,n}量词,它匹配从Ñ倍的图案限制重复


当您按照自己的方式拆分它时,它将在~上拆分a~~b两次,因此中间元素将为空字符串。

你可能也通过反转您的分隔符的顺序是这样解决了这个问题:

String[] temp = myString.split("~~~|~~|~"); 

这将首先尝试拆就~~,分裂之前~和做工精细。但是你应该使用第一种方法。

+0

问题是他想用'~~~~ '也是...... – Betlista

+2

@Betlista'+'是一个正则表达式量词,意思是匹配先验标记1或*多*次。这意味着它也会覆盖'~~~~~~~~~~~'':-) – HamZa

+0

我确切地知道'+'是什么意思,但他要求“......只包含由〜,~~或~~~“,所以也许'”〜{1,3}“'更好 – Betlista

4

只需转动模式围:

String myString = "hello world~~hello~~world"; 
    String[] temp = myString.split("~~~|~~|~"); 
+0

+1用于计算OP实际要求的内容。 –

3

试试这个:

myString.split("~~~|~~|~"); 

它肯定会工作。在你的代码中,实际上第一次发生~时会发生什么,它将作为第一个分隔符并从该点开始拆分字符串。所以它不会在您的字符串中的任何地方得到~~~~~,尽管它在那里。像:

[hello world]~[]~[hello]~[]~[world] 

方括号被分成5个不同的字符串值。

相关问题