如何基于第一次出现拆分String?

时间:2014-02-21 02:21:39

标签: java regex

如何根据第一个等号"="拆分字符串?

所以

test1=test1

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

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

但是CSV字符串呢

test1=test1=

4 个答案:

答案 0 :(得分:5)

您可以使用split

中显示的"test1=test1=test1=".split("=", 0); // ["test1","test1","test1"] 的第二个参数

如果您希望尽可能多地进行拆分,请使用:

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

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

{{1}}

答案 1 :(得分:1)

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

或者您可以使用

string.split("=", 2);

此处的数字2表示该模式最多使用2-1 = 1次,因此生成长度为2的数组。

答案 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));
}

如果抓住所有它可以达到第一个等号,那么之后的所有内容。

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

答案 3 :(得分:1)

尝试查看Docs,因为还有另一个.split(String regex, int 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]