2015-04-01 55 views
1

我正在使用Eclipse for Java,我想分割输入行而不会丢失任何字符。如何拆分字符串而不丢失任何单词?

例如,输入线是:

IPOD6 1 USD6IPHONE6 16G,64G,128G USD9,USD99,USD999MACAIR 2013-2014 USD123MACPRO 2013-2014,2014-2015 USD899,USD999 

和期望的输出是:

IPOD6 1 USD6 
IPHONE6 16G,64G,128G USD9,USD99,USD999 
MACAIR 2013-2014 USD123 
MACPRO 2013-2014,2014-2015 USD899,USD999 

我用split("(?<=\\bUSD\\d{1,99}+)")但它不工作。

+0

你能改用扫描仪?我觉得用这种方法标记会容易得多。 – Harvtronix 2015-04-01 02:30:25

+0

是否要将输入拆分为数组或只添加换行符? – 2015-04-01 02:34:55

回答

1

你只需要添加里面的正面看,后面的非单词边界\B\B两个非单词字符或两个单词字符之间的匹配。它不会在USD9USD9,子串中的逗号之间存在的边界上分割,因为在USD9和逗号之间存在单词边界,因为9是单词字符,而,是非单词字符。它在USD6IPHONE6之间的边界上分开,因为在这些子串之间存在非字边界\B,因为6是一个单词字符,而I也是一个单词字符。

String s = "IPOD6 1 USD6IPHONE6 16G,64G,128G USD9,USD99,USD999MACAIR 2013-2014 USD123MACPRO 2013-2014,2014-2015 USD899,USD999"; 
String[] parts = s.split("(?<=\\bUSD\\d{1,99}+\\B)"); 
for(String i: parts) 
{ 
    System.out.println(i); 
} 

输出:

IPOD6 1 USD6 
IPHONE6 16G,64G,128G USD9,USD99,USD999 
MACAIR 2013-2014 USD123 
MACPRO 2013-2014,2014-2015 USD899,USD999 
1

没有使它过于复杂,使用这种模式

(?=IPOD|IPHONE|MAC) 

,并与新的生产线替代
现在很容易捕获或分成数组
Demo


或可能此图案

((USD\d+,?)+) 

和替换W/$1\n
Demo

相关问题