如何在不丢失任何单词的情况下拆分字符串?

How to split a string without losing any word?

我正在为 Java 使用 Eclipse,我想在不丢失任何字符的情况下拆分输入行。

例如输入行是:

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}+)") 但它不起作用。

不要让它太复杂,使用这个模式

(?=IPOD|IPHONE|MAC)

并替换为新行
现在很容易捕获或拆分成一个数组
Demo


或者这个模式

((USD\d+,?)+)

并替换为 \n
Demo

你只需要在正后视中添加一个非单词边界\B\B 匹配两个非单词字符或两个单词字符。它不会在此 USD9, 子串中存在于 USD9 和逗号之间的边界上拆分,因为 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