Вы можете использовать lookbehind, как предложил @Piotr Findeisen (+1):
public class RegexExample{
public static void main(String[] args) {
String s = "firstWordWithSpaceAfter secondWordWithSpaceAfter wordWithLineBreakAfter\nlastWord";
String sa[] = s.split("(?<=[ \\n])");
for (String saa : sa )
System.out.println("[" + saa + "]");
}
}
Вывод:
[firstWordWithSpaceAfter ]
[secondWordWithSpaceAfter ]
[wordWithLineBreakAfter
]
[lastWord]
Краткое объяснение:
?<=
isпосмотрите назад, это означает, что вы получили совпадение, если данные перед искомым выражением совпадают с регулярным выражением, следующим после ?<=
(в данном случае [ \\n]
)
[ \\n]
является регулярным выражением, что означает один из символов в []
, поэтому все регулярные выражения говорят, что разделяется каждый раз, когда символ перед выражением / словом либо пробел, либо \n
.
Поскольку мы не пытались сопоставить пробел или \n
, они не будут удалены.