String.split()不使用" []"

时间:2015-07-06 06:33:01

标签: java string

我有一个IPv6字符串

String str = "demo1 26:11:d0a2:f020:0:0:0:a3:2123  demo2";
String searchString = "26:11:d0a2:f020:0:0:0:a3:2123";

当我使用str.split(searchString)代码返回

["demo1 ", "  demo2"]

哪个好,但是当我使用时:

String str = "demo1 [26:11:d0a2:f020:0:0:0:a3]:2123  demo2";
String searchString = "[26:11:d0a2:f020:0:0:0:a3]:2123";

并执行str.split(searchString)重新启动

[demo1 [26:11:d0a2:f020:0:0:0:a3]:2123  demo2]

我猜错了,有人可以告诉我为什么会得到这种输出吗?

4 个答案:

答案 0 :(得分:1)

由于split函数将regex作为参数,因此您需要转义这些括号,否则此[26:11:d0a2:f020:0:0:0:a3]仅匹配单个字符。

String searchString = "\\[26:11:d0a2:f020:0:0:0:a3\\]:2123";
str.split(searchString);

答案 1 :(得分:1)

这是因为split(String str)将正则表达式模式字符串作为参数。该字符串将用作正则表达式模式,以匹配此模式的所有分隔符。

在正则表达式模式中,您将在[]中提供字符集。

为了让它按照您的方式工作,您必须使用此正则表达式模式字符串:
\[26:11:d0a2:f020:0:0:0:a3\]:2123

即。在java中: String searchString = "\\[26:11:d0a2:f020:0:0:0:a3\\]:2123";

答案 2 :(得分:1)

我希望你熟悉字符串正则表达式。在java中,正则表达式[abc]表示与OR b OR c匹配我鼓励你逃避方括号尝试:

String str = "demo1 [26:11:d0a2:f020:0:0:0:a3]:2123  demo2";
String searchString = "\\[26:11:d0a2:f020:0:0:0:a3\\]:2123";

答案 3 :(得分:0)

您必须为某些特殊字符使用转义序列。在\\[ ... \\]变量中使用searchString