我有一个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]
我猜错了,有人可以告诉我为什么会得到这种输出吗?
答案 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
。