码迷,mamicode.com
首页 > 编程语言 > 详细

Java常用的几个正则方法(查找索引,匹配,替换)

时间:2015-04-09 19:59:30      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:正则表达式   java   过滤   

正则表达式是一种为了方便操作字符串而约定的规则.在PHP,JAVA等很多主流语言都有正则的使用.最常见的用法莫过于查找,替换和匹配.下面作为简单的总结,通过用简单的例子,记录下常用的几个方法.


关于正则如何使用,就不解释了,因为网上也能找到非常多的相关资料可以看.这里只将几个常用的方法总结:

查找索引

通过关键字符串,去在目标内容中去匹配查找它的位置,这应该是最常见的用法. String类也同样提供了indexOf() 方法去实现相同的效果.但indexOf()只能从开头的位置或者特定位置去查找 ,并且只能超找一次,并不像正则的start()方法能将所有索引位置都找出来, indexOf()要配合循环才能实现这样的效果.

private static final String CONTENT = "Nineteen US-listed Chinese companies including Yanzhou Coal Mining Co, "
			+ "Youku Tudou Inc and cosmetic e-commerce Jumei International Holding jumped by more than 10 percent on "
			+ "Wednesday, compared to a 0.15 percent advance in the Dow Jones Industrial Average.";
	
	/**
	 * 查找字符串位置
	 * 在格式为"XXing" (注意"ing"前面跟字符串,后面是不跟字符串的) 的字符串中寻找字符串"ing"的开始和结束位置
	 */
	private void findIndex()
	{
		String input = "\\Bing\\b";
		
		Pattern p = Pattern.compile(input);
		Matcher m = p.matcher(CONTENT);
		
		while(m.find())
		{
			Log.i("---开始的位置---", "m.start() = "+m.start());
			Log.i("---结束的位置---", "m.start() = "+m.end());
		}
	}

运行结果:

技术分享


匹配

find() 方法用于匹配内容中是否包含所要匹配查找的字符串,如果包含,则返回true, 否则返回false.

matches() 方法用于匹配内容字符串是否和所要匹配的字符串完全匹配相同.相同则返回true, 否则返回false.

当然,find() 同样用String类的indexOf() 也能实现,如果indexOf() 返回的索引位置值小于0,则代表不包含这个元素(或字符串), 大于等于 则表示包含. 至于matches() 用equals() 方法也能实现.

/**
	 * 查找是否包含某个字符串
	 */
	private void findIndexs()
	{
		String input = "Holding";
		
		Pattern p = Pattern.compile(input);
		Matcher m = p.matcher(CONTENT);
		
		Log.i("---findIndexs()后---", "findIndexs ---> m.find() = "+ m.find());
		//从索引号为10的元素位置开始匹配
		Log.i("---findIndexs()后---", "findIndexs ---> m.find(10) = "+ m.find(10));
		Log.i("---findIndexs()后---", "findIndexs ---> m.matches() = "+ m.matches());
	}

运行结果:

技术分享


替换

经常也会碰到这样的情景: 面对一大段字符串,比如html代码, 我们想去过滤替换某些字符串,正则是最好的结局方法.因为这样就能避免写一大堆代码去实现比较复杂的过滤逻辑.

比如,在字符串"aababaaaab"这样的字符串中,需要将b以及b前面的一个或几个a所组成的字符串替换成特定的字符串"test",如果不用正则. 用String类提供的方法去做,逻辑大概就是在一个循环里面,先找出所有b的位置,然后根据各个b的索引位置去切割替换它们,在代码上就写起来就一堆代码了. 但是正则就不需要这么复杂, 比如找出所有满足这个规则"b以及b前面的那些字符串" 就能用 (a+b)来表示了. 下面这个例子,就能很好的解决这种替换情景的问题.

/**
	 * 替换字符串
	 */
	private void replaceAll()
	{
		String input = "(\\b|\\B)(m+|g+)e(\\b|\\B)";
		
		Pattern p = Pattern.compile(input);
		Matcher m = p.matcher(CONTENT);
		
		String mCONTENT= m.replaceAll("_TEST_CONTENT_");
		
		Log.i("---replaceAll()后的内容---", "replaceAll() = "+ mCONTENT);
	}
	
	/**
	 * 只替换首次匹配到的字符串
	 */
	private void replaceFirst()
	{
		String input = "(\\b|\\B)(m+|g+)e(\\b|\\B)";
		
		Pattern p = Pattern.compile(input);
		Matcher m = p.matcher(CONTENT);
		
		String mCONTENT= m.replaceFirst("_TEST_CONTENT_");
		
		Log.i("---replaceFirst()后的内容---", "replaceAll() = "+ mCONTENT);
	}

运行结果:

技术分享











Java常用的几个正则方法(查找索引,匹配,替换)

标签:正则表达式   java   过滤   

原文地址:http://blog.csdn.net/stzy00/article/details/44962851

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!