我正在尝试在Java中拆分字符串,但将换行符保留为数组中的元素。
例如,输入:"Hello \n\n\nworld!"
我希望输出为:["Hello", "\n", "\n", "\n", "world", "!"]
我现在使用的正则表达式是这样的:
String[] parsed = input.split(" +|(?=\\p{Punct})|(?<=\\p{Punct})");
这让我得到了我想要的标点符号分隔,但其输出如下:
["Hello", "\n\n\nworld", "!"]
有没有办法解开Java中的换行符?
答案 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]
。
请注意,使用此方法可以获得更易于编写和编辑的模式,因为您不需要使用外观。