1. 概述

在本教程中,我们将了解用换行符分割 Java 字符串的不同方法。由于换行符在不同操作系统中是不同的,我们将讨论涵盖 Unix、Linux、Mac OS 9 及更早版本、macOS 和 Windows 操作系统的方法。

2. 按换行符分割 字符串

2.1.使用 System#lineSeparator 方法按换行符分割 字符串

鉴于换行符在不同操作系统中是不同的,当我们希望代码与平台无关时,我们可以使用系统定义的常量或方法。

System#lineSeparator 方法返回底层操作系统的行分隔符字符串。它返回系统属性 line.separator 的值。

因此,我们可以使用 System#lineSeparator 方法返回的行分隔符字符串和 String#split 方法来按换行符分割 Java 字符串

String[] lines = "Line1\r\nLine2\r\nLine3".split(System.lineSeparator());

结果行将是:

["Line1", "Line2", "Line3"]

2.2.使用正则表达式按换行符分割 字符串

接下来,我们首先看看不同操作系统中用于分隔行的不同字符。

\n ”字符在 Unix、Linux 和 macOS 中分隔行。另一方面,“ \r\n ”字符在 Windows 环境中分隔行。最后,“ \r ”字符在 Mac OS 9 及更早版本中分隔行。

因此,我们在使用正则表达式按换行符分割字符串时需要处理所有可能的换行符。

最后,让我们看一下涵盖所有不同操作系统的换行符的正则表达式模式。也就是说,我们需要寻找“\n”、“\r\n”和“\r”模式。这可以通过使用Java 中的正则表达式轻松完成。

覆盖所有不同换行符的正则表达式模式将是:

"\\r?\\n|\\r"

分解它,我们看到:

  • \\n = Unix、Linux 和 macOS 模式
  • \\r\\n = Windows 环境模式
  • \\r = MacOS 9 及更早版本的模式

接下来,我们使用 String # split 方法来分割 Java String 。让我们看几个例子:

String[] lines = "Line1\nLine2\nLine3".split("\\r?\\n|\\r");
String[] lines = "Line1\rLine2\rLine3".split("\\r?\\n|\\r");
String[] lines = "Line1\r\nLine2\r\nLine3".split("\\r?\\n|\\r");

所有示例的结果行将是:

["Line1", "Line2", "Line3"]

2.3. Java 8 中按换行符分割 字符串

Java 8 提供了一种 “\R” 模式,可以匹配任何 Unicode 换行序列,并涵盖不同操作系统的所有换行符。因此,在Java 8或更高版本中,我们可以使用 “\R” 模式来代替 “\\r?\\n|\\r”

让我们看几个例子:

String[] lines = "Line1\nLine2\nLine3".split("\\R");
String[] lines = "Line1\rLine2\rLine3".split("\\R");
String[] lines = "Line1\r\nLine2\r\nLine3".split("\\R");

同样,所有示例的结果输出行将是:

["Line1", "Line2", "Line3"]

三、结论

在这篇简短的文章中,我们研究了在不同操作系统中可能遇到的不同换行符。此外,我们了解了如何使用我们自己的正则表达式模式以及使用从 Java 8 开始可用的 “\R” 模式通过换行符分割 Java 字符串。

与往常一样,所有这些代码示例都可以在 GitHub 上获得。