【问题标题】:How to split a string by triple dots or horizontal ellipsis如何用三点或水平省略号分割字符串
【发布时间】:2018-01-14 05:06:07
【问题描述】:

我在尝试用“...”分割字符串时遇到问题

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

我试过了:

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

还有很多其他的,但我还没有找到解决方案。

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

【问题讨论】:

  • 试试text.split("\\.{2,}|…")

标签: java split delimiter


【解决方案1】:

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

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

水平省略号是一个不同的字符。不是正则语言中的元字符,所以可以直接匹配,不转义:

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

【讨论】:

  • .split("…|\\Q...\\E")
  • @Bohemian 谢谢 - 我完全忘记了逃避“批发”正则表达式块的能力。
【解决方案2】:

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

(\.)*

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

(\\.)*

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

【讨论】:

    【解决方案3】:

    一般情况下可以使用

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

    要同时删除封闭的空格:

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

    this regex demo

    如果您需要确保三个点没有被其他点字符包围,您可以添加环视:

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

    详情

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

    Java demo

    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.]
    

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 2023-03-20
      • 1970-01-01
      • 2011-03-26
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      相关资源
      最近更新 更多