如何用三重点或水平省略号拆分字符串



我在尝试通过"..." 拆分字符串时遇到问题

String text ="Here…It is safer.";

我试过了:

String [] output = text.split("[\...]");
String [] output = text.split("\.");

和许多其他人,但我还没有找到解决方案。

我知道这个问题很简单,但如果有人能解释我应该如何让它工作,我会很高兴。

用于匹配三个点的正则表达式是\.{3}\.\.\.[.][.][.]\Q...\E

[\...]\.都匹配单个点,因为字符类中的重复字符被视为单个字符。

水平省略号是不同的字符。它不是正则表达式语言中的元字符,因此可以直接匹配而无需转义:

String [] output = text.split("…");

一般来说,你可以使用

String[] chunks = text.split("…|\.{3}");

同时删除封闭空格:

String[] chunks = text.split("\s*(?:…|\.{3})\s*");

请参阅此正则表达式演示。

如果您需要确保三重点没有与其他点字符一起括起来,您可以添加环视:

String[] chunks = text.split("\s*(?:…|(?<!\.)\.{3}(?!\.))\s*");

详情

  • s*- 零个或多个空格
  • (?:...)- 非捕获组
  • - 省略号
  • |- 或
  • (?<!.)- 如果当前位置左侧有一个点字符,则否定回溯,则匹配失败
  • .{3}- 三点
  • (?!.)- 如果当前位置右侧有一个点字符,则匹配失败的负前瞻。

观看 Java 演示:

String text = "Here…It is safer... The end.";
String[] chunks = text.split("\s*(?:…|\.{3})\s*");
System.out.println(Arrays.toString(chunks));
// => [Here, It is safer, The end.]

多个点的正则表达式将是:

(.)*

如果我没记错的话,Java将需要这样的东西:

(\.)*

编辑:刚刚注意到您只要求三点。由于已经有一个正确的答案,我将把它留在这里以防万一。

最新更新