Java中String.split()分割字符串细节问题小结

首先,要知道Sring中的split() 方法是支持正则表达式的,这个东西有时候让人很恼火,觉得不好用,有时候又让人觉得挺方便的。我主要说说目前我遇到的问题

用"."来分割字符串

在某些程序中会碰到需要用点来分割字符串,首先看这段很简单的代码

package not.die.in.here;

public class SplitTest {

	public static void main(String[] args) {
		String a = "a.sd.sad.sad.sad.asdwq.q.";
		String[] arr = a.split(".");
		for(int i=0;i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}
	}

}

运行以后控制台没有任何输出,奇怪,那就改一下

 在后面加上一个输出 System.out.println(arr.length);

输出结果:

 

错误原因就在正则表达式这里,点代表的意思是:匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。


匹配 "\",而 '\(' 则匹配 "("。然后要匹配的写\.的话,还是会有问题,因为\这个东西也是一个需要转义的字符:

将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\'

所以要写一个用点分割的split函数,则需要在参数中写"\\."才可以生效:

同理涉及到正则表达式转义字符的分割,都需要添加转义字符,有关正则表达式的语法,这里给个传送门

https://www.runoob.com/regexp/regexp-syntax.html

 

好用处:用split分割任意长度的空格等

这个就是在今天写PAT的时候碰见的恶心输入,源输入:

这里就不讨论问题是什么了,总之就是需要你获取到这么多的数据,挨个放好等待处理,因为数据量最大到十万级别,然后又要求时限,所以放弃使用Scanner.nextInt() 之类的方法,需要使用BufferedReader来读取,加快速度。于是乎,写到分割字符串的时候问题来了,他给的输入中0后面包含了一堆的空格,如果单纯的按照 split(" ")来写的话,会出来好几个空格当一个字符串元素的情况,影响正常数据的输入。后来经过对正则表达式的学习,学会了一点简单的用法

使用正则表达式表示任意多个空格 : \\s+   

这个表达式,第一个\用来转义第二个\,\s表示空格,+表示在他前面的字符必须出现至少一个

name问题迎刃而解,输出:

成功消除空格,可以进行接下来的数数据操作了

正则表达式真的是个很厉害的东西

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值