【问题标题】:How to split a string by a certain string?如何用某个字符串分割一个字符串?
【发布时间】:2021-02-27 09:22:17
【问题描述】:

我想按字符序列而不是单个字符来拆分字符串。我有这个:

String m = "Alcides&|&ola&|&Alcides";
String[] split = m.split("&|&");
System.out.println(split[0] + split[1] + split[2]);

我的目标是在split[0] -> Alcidessplit[1] -> olasplit[2] -> Alcides 中拥有。

但是System.out.println 的结果却是:

Alcides|ola|

【问题讨论】:

    标签: java string split


    【解决方案1】:

    split 需要一个正则表达式。这意味着您必须转义 |(即 logical operator

    String[] split = m.split("&\\|&");
    

    【讨论】:

      【解决方案2】:

      split 接受代表regex(正则表达式)的字符串。

      如果您不知道某些字符或序列是否可以被视为正则表达式的特殊/元(例如在您的情况下 | 代表 OR 运算符,或者可能类似于 \s 代表所有空格)您可以使用Pattern.quote(yourString) 生成仅代表yourString 的正则表达式。

      所以在你的情况下你可以使用

      String[] split = m.split(Pattern.quote("&|&"));
      

      【讨论】:

        【解决方案3】:

        | 应该被转义,因为它在正则表达式中用作 OR:

        String m = "Alcides&|&ola&|&Alcides";
        String[] split = m.split("&\\|&");
        System.out.printf("%s  %s  %s%n", split[0], split[1], split[2] ); // Alcides  ola  Alcides
        

        【讨论】:

          【解决方案4】:

          方法split 采用字符串正则表达式 作为参数,其中vertical bar 字符被解释为布尔“或”。如果你不想处理这个,你可以先replace这些序列:&|& - 用一些不太明显的东西,例如triple vertical bar delimiter,然后围绕这些分隔符拆分字符串:

          String m = "Alcides&|&ola&|&Alcides";
          String[] split = m.replace("&|&", "\u2980").split("\u2980");
          System.out.println(split[0] + " " + split[1] + " " + split[2]);
          // Alcides ola Alcides
          

          另见:How to remove sequence of two elements from array or list?

          【讨论】:

            猜你喜欢
            • 2017-11-30
            • 1970-01-01
            • 1970-01-01
            • 2021-12-27
            • 1970-01-01
            • 2023-03-25
            • 1970-01-01
            • 2021-02-25
            • 2021-09-25
            相关资源
            最近更新 更多