用空格分隔字符串,但在分割数组中保留换行符

时间:2017-11-05 10:01:19

标签: java arrays regex string

我正在尝试在Java中拆分字符串,但将换行符保留为数组中的元素

例如,输入:"Hello \n\n\nworld!"

我希望输出为:["Hello", "\n", "\n", "\n", "world", "!"]

我现在使用的正则表达式是这样的:
String[] parsed = input.split(" +|(?=\\p{Punct})|(?<=\\p{Punct})");

这让我得到了我想要的标点符号分隔,但其输出如下:
["Hello", "\n\n\nworld", "!"]

有没有办法解开Java中的换行符?

3 个答案:

答案 0 :(得分:2)

诀窍是在每个&#34; \ n&#34;之后添加空格。然后应用你的正则表达式。

    String line = "Hello \n\n\nworld!";
    line = line.replaceAll("\n", "\n "); // here we replace all "\n" to "\n "
    String[] items = line.split(" +|(?=\\p{Punct})|(?<=\\p{Punct})");   

or shorter version:

    String line = "Hello \n\n\nworld!";
    String[] items = line.replaceAll("\n", "\n ").split(" +|(?=\\p{Punct})|(?<=\\p{Punct})");  

因此,在这种情况下,结果是:[&#34;你好&#34;,&#34; \ n&#34;,&#34; \ n&#34;,&#34; \ n&#34 ;,&#34;世界&#34;,&#34;!&#34;]

答案 1 :(得分:1)

您可以先用Dates(换行符和空格)替换所有\n,然后对空格字符进行简单拆分。

\n
  • 输入: String input = "Hello \n\n\nworld!"; String replacement = input.replace("\n", "\n "); String[] result = replacement.split(" ");
  • 替换:"Hello \n\n\nworld!"
  • 结果:"Hello \n \n \n world!"

注意:我的示例没有处理最终的感叹号 - 但似乎您已经知道如何处理它。

答案 2 :(得分:0)

使用find方法可以简化操作:

String str = "Hello \n\n\nworld!";
List<String> myList = new ArrayList<String>();

Pattern pat = Pattern.compile("\\w+|\\H");
Matcher m = pat.matcher(str);

while (m.find()) {
    myList.add(m.group(0));
}

如果您使用Java 7,请将\\H更改为[\\S\\n]

请注意,使用此方法可以获得更易于编写和编辑的模式,因为您不需要使用外观。