我在尝试通过"..." 拆分字符串时遇到问题
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将需要这样的东西:
(\.)*
编辑:刚刚注意到您只要求三点。由于已经有一个正确的答案,我将把它留在这里以防万一。