Java中的split函数

在刷到leetcode第657题的时候,看到一种解法是用分割后的字符串数组的长度去判断Robot是否能回到原点,代码如下:

moves= moves + " ";

return moves.split("L").length==moves.split("R").length && moves.split("U").length == moves.split("D").length;

两行代码就做出来了,看起来也十分直观,但是对于第一行,字符串moves 首尾都加了空格不理解什么意思,后来写了主函数进行调试,


public static void main(String[] args) {
	String moves = "23@45872";
	String [] a = moves.split("2");
	for(int i=0;i<a.length;i++){
		System.out.println(a[i]);
		System.out.println(",");
	}


输出结果为:     ,3@4587,
所以这说明对字符串以2作为分割符分割时,会在第一个2处自动添加一个空格,而末尾的2则不加空格。如果以3作为分隔符,结果为2,@45872,说明如果分割符不是首字符的时候,不会自动添加空格。因此moves首尾添加空格符就能理解了,如果不加的话,在以末尾的字符作为分割符时,会漏掉统计,比如moves是“UD”
这时候可以明显看出题目的正确结果应该返回true,但是moves.split(U").length=2(因为分割后为空格和D)而moves.split(D").length=1(分割后只有U),所以弄清原理后,可以只在末尾添加空格,即:
moves = moves + " ";
提交后Accept



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值