【BUG玩一天系列】Java spilt方法需要注意的地方

先贴一下有问题的代码,看看坑具体在哪里。

public class TestSpilt {
	public static void main(String[] args) {
		String limiter = "$";
		String str = "a" + limiter + "b" + limiter + "c";
		String[] strs = str.split(limiter);
		for(int i=0; i<strs.length; i++){
			System.out.println(strs[i]);
		}
	}
}

看出来坑在哪里了吗

之前用spilt的方法,以为是根据指定的字符串进行拆分,所以随便定义了一个分割字符串。

实际上,在java API中,是这样定义的


public String[] split(String regex)

根据给定正则表达式的匹配拆分此字符串。

该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。

例如,字符串 "boo:and:foo" 使用这些表达式可生成以下结果:

Regex 结果

: { "boo", "and", "foo" }
o { "b", "", ":and:f" }

参数:
    regex - 定界正则表达式
返回:
字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的
抛出:
PatternSyntaxException - 如果正则表达式的语法无效


可以看出传入的参数是正则表达式而不是字符串

"+"、"?"、"\"、"*"、"^"、"."、"$"在正则表达式里都有特殊意义

所以最好不要用这些字符作为分隔符,或者在用的时候进行转义。


猜你喜欢

转载自blog.csdn.net/wp594458910/article/details/77482844