java索引查找_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";

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

}

}

运行结果:

59c710a9f46780f0e8eb955e297ca2f4.png

匹配

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

}

运行结果:

bb6c5e2591c24e460948bcc1eb2ac45e.png

替换

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

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

/**

* 替换字符串

*/

private void replaceAll()

{

String input = "(|B)(m+|g+)e(|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)(m+|g+)e(|B)";

Pattern p = Pattern.compile(input);

Matcher m = p.matcher(CONTENT);

String mCONTENT= m.replaceFirst("_TEST_CONTENT_");

Log.i("---replaceFirst()后的内容---", "replaceAll() = "+ mCONTENT);

}

运行结果:

c4cc8980df491f1340b9d9d43b0598e0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值