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);
	}

运行结果:

时间: 2024-10-05 04:40:40

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

JAVA常用的XML解析方法

转并总结自(java xml) JAVA常用的解析xml的方法有四种,分别是DOM,JAX,JDOM,DOM4j xml文件 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> <NO>1000001</NO> <ADDR>达达木图收费站</ADDR> </VALUE> <VALUE> <NO

Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]

java中常用的字符串的截取方法

java中常用的字符串的截取方法   1.length() 字符串的长度 例:char chars[]={'a','b'.'c'}; String s=new String(chars); int len=s.length(); 2.charAt() 截取一个字符 例:char ch; ch="abc".charAt(1); 返回'b' 3.getChars() 截取多个字符 void getChars(int sourceStart,int sourceEnd,char target

java常用工具方法2

/* * Copyright 2005 Joe Walker * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LI

Java常用函数式接口--Consumer接口andThen()方法使用案例(二)

Java常用函数式接口--Consumer接口使用案例 原文地址:https://www.cnblogs.com/niwotaxuexiba/p/10852243.html

Java基础 —— Java常用类

Java常用类: java.lang包: java.lang.Object类: hashcode()方法:返回一段整型的哈希码,代表地址. toString()方法:返回父类名+"@"+哈希码(一般用于覆盖). equals()方法:返回"=="操作的布尔值(一般用于覆盖). finalize()方法:用于对象的销毁(不受人为控制,由JVM调用,遵从垃圾回收机制). clone()方法:用于对象之间的拷贝(深拷贝). getClass()方法:返回对象的字节码文件对

java常用正则表达式

java常用正则表达式 1.^\d+$ //匹配非负整数(正整数 + 0) 2.^[0-9]*[1-9][0-9]*$ //匹配正整数 3.^((-\d+) ?(0+))$ //匹配非正整数(负整数 + 0) 4.^-[0-9]*[1-9][0-9]*$ //匹配负整数 5.^-?\d+$ //匹配整数 6.^\d+(\.\d+)?$ //匹配非负浮点数(正浮点数 + 0) 7.^(([0-9]+\.[0-9]*[1-9][0-9]*) ?([0-9]*[1-9][0-9]*\.[0-9]+)

Java常用集合类(1)

一.HashMap 参考文章: http://yikun.github.io/2015/04/01/Java-HashMap%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/ 特别说明:jdk8中对HashMap进行了优化,这里以jdk8为基准说明. 1.1 hashmap 结构 HashMap使用hash算法来实现字典数据结构(dictionary),任何hash算法必然伴随着hash冲突问题,而常用解决的方案有大致

java常用代码优化

摘要: 本文大多技术围绕调整磁盘文件 I/O,但是有些内容也同样适合网络 I/O 和窗口输出. 第一部分技术讨论底层的I/O问题,然后讨论诸如压缩,格式化和串行化等高级I/O问题.然而这个讨论没有包含应用设计问题,例如搜索算法和数据结构,也没有讨论系统级的问题,例如文件高速缓冲. Java语言采取两种截然不同的磁盘文件结构.一个是基于字节流,另一个是字符序列.在Java 语言中一个字符有两个字节表示,而不是像通常的语言如c语言那样是一个字节.因此,从一个文件读取字符时需要进行转换.这个不同在某些