Java如何在第一次换行符处将字符串分开

6

有没有一种高效的方法,在检测到字符串中的第一个换行符时将其拆分成两个部分。

例如,像这样的字符串:

String str = "line 1\n"+
             "line 2\n"+
             "line 3\n";

我希望你能将“line 1”从字符串中分离出来,其余部分作为另一个字符串,因此最终结果如下:

string1 = "line 1";
string2 = "line 2\n"+
          "line 3\n";

请访问 https://dev59.com/OHRB5IYBdhLWcg3w9L3n 了解更多相关编程想法。 - k1eran
3个回答

25
您可以使用String类的split(regex,limit)方法。请尝试。
String[] result = yourString.split("\n", 2);

如果您想使用与操作系统相关的换行符

String[] result = yourString.split(System.lineSeparator(), 2);

或者是独立于操作系统的方式

//since Java 8
String[] result = yourString.split("\\R", 2);

//before Java 8
String[] result = yourString.split("\r\n|\r|\n", 2);
现在。
result[0] = "line 1";
result[1] = "line 2\nline 3\n";

MacOS使用\r作为行分隔符,请使用\r|\n|\r\n修复正则表达式。 - Dmitry Ginzburg
@DmitryGinzburg,您关于需要包含Mac分隔符的观点是正确的,但是您的正则表达式无法按预期工作,因为它会在\r\n上创建两个拆分,一个用于\r,另一个用于\n,因为正则表达式是从左到右解释的。这就是为什么\r\n应该在\r\n之前。无论如何,感谢您指出这一点。 - Pshemo
很可能你是对的,正确的正则表达式应该是\r|\n|(\r\n)。或者只需使用(\r?\n)|\r - Dmitry Ginzburg
1
@DmitryGinzburg 我的意思是像 foo|bar|foobar 这样的正则表达式永远不会匹配 foobar,因为它会先搜索 foobar,这将消耗掉 foobar 的部分。一般规则是在更一般的正则表达式之前放置更详细的正则表达式,就像我回答中的正则表达式中应该将 \r\n 放在 \r\n 之前。"或者只是 \r?\n|\r" 是的,这个可以正确地工作。 - Pshemo

6
尝试使用String.substring()函数。
String str23 = "line 1 \n line 2 \n line3 \n";
String line1 = str23.substring(0, str23.indexOf("\n"));
String line2 = str23.substring(str23.indexOf("\n")+1, str23.length());

System.out.println(line1+"-----"+line2);

4
String str = "line 1\n line 2\n line 3\n";

int newLineIndex = str.indexOf("\n");

String first = str.substring(0, newLineIndex);
String rest = str.substring(newLineIndex + 1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接