【问题标题】:How to split a String based on first occurence?如何根据第一次出现拆分字符串?
【发布时间】:2014-03-22 08:26:58
【问题描述】:

如何根据 first 等号 "=" 拆分字符串?

所以

test1=test1

应该转换成test1, test1(作为一个数组)

"test1=test1".split("=") 在此示例中工作正常。

但是 CSV 字符串呢

test1=test1=

【问题讨论】:

标签: java regex


【解决方案1】:

您可以使用split 的第二个参数,如Java doc 中所示

如果您希望拆分发生尽可能多的次数,请使用:

"test1=test1=test1=".split("=", 0);    // ["test1","test1","test1"]

如果您希望拆分只发生一次,请使用:

"test1=test1=test1=".split("=", 2);    // ["test1","test1=test1="]

【讨论】:

  • 不起作用。 int 参数是 limit。试试"test1=test1=test1".split("=", 0);
  • @mikeaworski 您显然没有阅读我链接到的文档,上面写着:“如果 n 为零,则该模式将尽可能多次应用”并且 当然 i> 您可以更改输入字符串以匹配用例。
  • 是的,我显然做到了。因此,我会用正确的答案来回答。
【解决方案2】:

尝试查看Docs,因为还有另一个.split(String regex, int limit) 方法接受两个参数:正则表达式和limit(限制数组的大小)。因此,您可以将 int 限制应用为仅 2 - 其中数组只能包含两个元素。

String s = "test1=test2=test3";

System.out.println(Arrays.toString(s.split("=", 2))); // [test1, test2=test3]

或者

String s = "test1=test2=";

System.out.println(Arrays.toString(s.split("=", 2))); // [test1, test2=]

或者

String s = "test1=test2";

System.out.println(Arrays.toString(s.split("=", 2))); // [test1, test2]

【讨论】:

    【解决方案3】:

    可以通过indexOf()方法找到字符串中第一个“=”的索引,然后用索引来分割字符串。

    或者你可以使用

    string.split("=", 2);
    

    这里的数字 2 表示该模式最多会被使用 2-1=1 次,因此会生成一个长度为 2 的数组。

    【讨论】:

      【解决方案4】:

      这对于Matcher 来说比String.split() 更好。试试

      Pattern p = Pattern.compile("([^=]*)=(.*)");
      Matcher m = p.matcher("x=y=z"); 
      if (m.matches()) { 
          System.out.println(m.group(1));
          System.out.println(m.group(2));
      }
      

      如果抓取第一个等号之前的所有内容,那么之后的所有内容。

      如果您坚持拆分,s.split("=(?!.*=)"),但不要。

      【讨论】:

        猜你喜欢
        • 2021-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多