1 字符串判断

 java的正则使用的是Pattern以及Matcher来配合使用的。

如果只是用来判断输入的字符串是否符合格式,推荐使用Matcher的matches方法。

public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "service@qq.com";
String regEx = "[\\w]+@[\\w]+\\.com";
Pattern pattren = Pattern.compile(regEx);
Matcher matcher =pattren.matcher(str);
System.out.println(matcher.matches()); }

如果是需要获取匹配的分组内容。推荐使用find和group

public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "service@qq.com";
String regEx = "([\\w]+)@([\\w]+\\.)com";
Pattern pattren = Pattern.compile(regEx);
Matcher matcher =pattren.matcher(str);
System.out.println(matcher.find());//true
System.out.println(matcher.group(1));//service
System.out.println(matcher.group(2));//qq. }

2字符串分割

使用pattren.split

public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "service@qq.com@x";
String regEx = "@";
Pattern pattren = Pattern.compile(regEx);
String[] strs =pattren.split(str);
StringBuffer buf = new StringBuffer();
buf.append("[");
for(int i=0;i<strs.length;i++) {
buf.append(strs[i]);
if(i<(strs.length-1)) {
buf.append(",");
}
}
buf.append("]");
System.out.println(buf.toString());//[service,qq.com,x]
}

3字符串替换

Matcher replaceFirst 找到第一个位置进行替换
replaceAll 替换所有位置
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "service@qq.com@x";
String regEx = "@";
Pattern pattren = Pattern.compile(regEx);
Matcher matcher = pattren.matcher(str);
System.out.println(matcher.replaceFirst(",@"));//service,@qq.com@x
System.out.println(matcher.replaceAll("?"));//service?qq.com?x }

上面的替换似乎完成了我们想要的功能,但是如果我任性点,我只想替换掉最后的一个@那我怎么办,java提供了比较自由的替换appendReplacement。

public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "service@qq.com@x@y";
String regEx = "@";
Pattern pattren = Pattern.compile(regEx);
Matcher matcher = pattren.matcher(str);
//System.out.println(matcher.replaceFirst(",@"));
//System.out.println(matcher.replaceAll("?"));
StringBuffer sb = new StringBuffer();
int index = 0;
while(matcher.find()) {
index++;
if(index==2) {
matcher.appendReplacement(sb, "?");
}
}
matcher.appendTail(sb);
System.out.println(sb.toString());//service@qq.com?x@y }

上面的是指定位置,这里我们配合分组来实现这样一个功能 我要给每个数字后面都加一个$符号 比如 12abc3deg623 我要置换为 12$abc3$deg623$

手册上:

替换字符串可能包含到以前匹配期间所捕获的子序列的引用:$g 每次出现时,都将被 group(g) 的计算结果替换。$ 之后的第一个数始终被视为组引用的一部分。如果后续的数可以形成合法组引用,则将被合并到 g 中。只有数字 '0' 到 '9' 被视为组引用的可能组件。例如,如果第二个组匹配字符串 "foo",则传递替换字符串 "$2bar" 将导致 "foobar" 被添加到字符串缓冲区。可能将美元符号 ($) 作为替换字符串中的字面值(通过前面使用一个反斜线 (\$))包括进来。

注意,在替换字符串中使用反斜线 (\) 和美元符号 ($) 可能导致与作为字面值替换字符串时所产生的结果不同。美元符号可视为到如上所述已捕获子序列的引用,反斜线可用于转义替换字符串中的字面值字符。

public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "12abc3deg623";
String regEx = "^([\\d]+)abc([\\d]+)deg([\\d]+)$";
Pattern pattren = Pattern.compile(regEx);
Matcher matcher = pattren.matcher(str);
StringBuffer sb = new StringBuffer();
//System.out.println(matcher.find());
/*System.out.println(matcher.find());
System.out.println(matcher.groupCount());*/
while(matcher.find()) {
matcher.appendReplacement(sb, "$1\\$abc$2\\$deg$3\\$");
}
matcher.appendTail(sb);
System.out.println(sb.toString());//12$abc3$deg623$ }

java【基础】正则表达式的更多相关文章

  1. Java基础-正则表达式(Regular Expression)语法规则简介

    Java基础-正则表达式(Regular Expression)语法规则简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正则表达式的概念 正则表达式(Regular Exp ...

  2. JAVA基础--正则表达式

    .  any character \d  A digit 0-9 \D  a non-digit [^0-9] \s  a whitespace character, 空白字符 \S  a non-w ...

  3. Java基础——正则表达式

    一.什么是正则表达式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表通常被用来检索.替换那些符 ...

  4. Java基础--正则表达式的规则

    注意:正则表达式只关注格式是否正确,不关注内容是否有效. 一.字符集合, []表示一个字符. 1.[abc] :指a,b,c中的任意一个字符. 2.[^abc]:指除了a,b,c外的任意字符. 3.[ ...

  5. 二十八、Java基础--------正则表达式

    在对字符串进行处理时一方面可以利用String对象的一些处理方法另一方面可以利用正则表达式,但是一般情况下用String对象方法进行处理起来会相对麻烦一些而正则表达式可以很方便的解决问题.为了更好的学 ...

  6. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  7. 黑马程序员:Java基础总结----正则表达式

    黑马程序员:Java基础总结 正则表达式   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 正则表达式 import  java.util.regex.*; 符合一定规 ...

  8. Java基础七-正则表达式

    Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...

  9. Java基础学习总结(35)——Java正则表达式详解

    在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包. 可粗略估计一下,除了偶尔用Linux的外,其他Linu  ...

  10. Java基础 -- 字符串(格式化输出、正则表达式)

    一 字符串 1.不可变String String对象是不可变的,查看JDK文档你就会发现,String类中每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以包含修改后 ...

随机推荐

  1. Mvc项目实例 MvcMusicStore 五

    Mvc项目实例 MvcMusicStore 一Mvc项目实例 MvcMusicStore 二Mvc项目实例 MvcMusicStore 三Mvc项目实例 MvcMusicStore 四Mvc项目实例 ...

  2. springboot中添加热部署

    <dependency> <!--Spring 官方提供的热部署插件 --> <groupId>org.springframework.boot</group ...

  3. word文档内容如何防止被复制

    word2016 审阅->限制编辑->1格式设置编辑 and 2编辑限制->3是,启动强制保护->输入秘密

  4. Includes() vs indexOf() in JavaScript

    碰到一个问题, 部分机器网页数据源不正常, 简单排查发现是使用了较新的Array.includs 方法. 查了下兼容性, chrome 需要47版本以后支持, 客户机果然是很久的43版本. 用Arra ...

  5. 【亲测显式等待】Selenium:元素等待的4种方法

    Selenium:元素等待的4种方法 1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用.   2.隐式等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉We ...

  6. Java内存管理之类似-Xms、-Xmx 这些参数的含义

    1.堆内存分配:JVM 初始分配的内存由**-Xms** 指定,默认是物理内存的 1/64:JVM 最大分配的内存由**-Xmx** 指定,默认是物理内存的 1/4:默认空余堆内存小于 40% 时,J ...

  7. java并发等待条件的实现原理(Condition)

    本篇继续学习AQS中的另外一个内容-Condition.想必学过java的都知道Object.wait和Object.notify,同时也应该知晓这两个方法的使用离不开synchronized关键字. ...

  8. java反射的性能问题

    java反射效率到底如何,花了点时间,做了一个简单的测试.供大家参考. 测试背景: 1. 测试简单Bean(int,Integer,String)的set方法2. loop 1亿次3. 测试代码尽可能 ...

  9. leetcode每日刷题计划-简单篇day3

    收到swe提前批面试hhh算是ep挂了的后续 努力刷题呀争取今年冲进去! Num 21 合并两个有序链表 Merge Two Sorted Lists 注意新开的链表用来输出结果的是ListNode ...

  10. rpm梳理