如何基于第一次出现来分割字符串?

12

如何基于第一个等号"="拆分一个字符串?

因此,

test1=test1

应转换为test1,test1(作为数组)

"test1=test1".split("=")在这个例子中可以正常工作。

但是对于CSV字符串呢?

test1=test1=

@netinept Java 语言 - blue-sky
你想从 "test1=test1" 中得到什么结果? - Warren Dew
仅在第一次出现时拆分字符串 - Michael Yaworski
4个回答

15
你可以使用 split 的第二个参数,就像在 Java doc 中所看到的那样。
如果你想要尽可能地多次拆分,请使用:
"test1=test1=test1=".split("=", 0);    // ["test1","test1","test1"]

如果您希望仅进行一次拆分,请使用:

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

不起作用。int参数是限制。尝试使用"test1=test1=test1".split("=", 0); - Michael Yaworski
@mikeyaworski,你显然没有阅读我链接的文档,该文档指出:“如果n为零,则模式将尝试匹配尽可能多的次数”。当然,你需要改变输入字符串以匹配使用情况。 - Kyle Falconer
是的,显然我记得。因此,我会用正确答案回答。 - Michael Yaworski

3

建议查看官方文档,因为还有另一个.split(String regex, int limit)方法,可以传入两个参数:正则表达式和限制数组大小的limit。所以您可以将int limit应用于仅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]

1
使用indexOf()方法可以找到字符串中第一个"="的索引,然后使用该索引来分割字符串。或者您也可以使用:
string.split("=", 2);

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

1
这对于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));
}

如果抓取所有等于号之前的内容,再加上等于号后面的所有内容。

如果你坚持要使用 split,可以用 s.split("=(?!.*=)"),但请不要这么做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接