正则表达式:

符合一定规则的表达式,用于专门操作字符串。

对QQ号码进行校验,要求:5-11位,0不能开头,只能是数字。

 public class Demo{
public static void main(String[] args) {
String qq = "741603187";
String regex = "[1-9][0-9]{4,10}";
boolean flag = qq.matches(regex);
if(flag){
System.out.println("OK");
}
else{
System.out.println("X");
}
}
}

操作功能:

(1)匹配:String  matches()方法

  [abc]:a,b或c

  [^abc]:任何字符,除了a,b或c

  [a-zA-Z]:a到z或A到Z,包含两头

  .   任何字符

  \d   数字[0-9]

  \D   非数字[^0-9]

  \w 单词字符[a-zA-Z_0-9]数字、字母、下划线

  \W  非单词字符

  X?    X,一次或一次也没有

  X*    X,零次或多次

  X+    X,一次或多次

    X{n}   X,恰好n次

  X{n,}   X,至少n次

   X{n,m}   X,至少n次,但是不超过m次

(2)切割:String  split()方法

例:按照叠词完成切割:

为了可以让规则的结果被重用,可以将规则封装成一个组,用( )完成。组的出现都有编号,从1开始。想要使用已有的组可以通过\n(n就是组的编号)的形式来获取。

 public class Demo{
public static void main(String[] args) {
String s = "abcccdeffghhhhhi";
String regex = "(.)\\1+";
String[] arr = s.split(regex);
for(String str : arr){
System.out.println(str);
}
}
}

输出结果:

ab
de
g
i

(3)替换:String   replaceAll()方法

 public class Demo{
public static void main(String[] args) {
//将字符串中的数字替换成*
String s1 = "abcc12432ffg333hi42314";
String regex1 = "\\d{4,}";
myReplace(s1, regex1, "*"); //将字符串中重叠的字符替换成单个字母,如aaa->a
String s2 = "abcccdeefffffg";
String regex2 = "(.)\\1+";
myReplace(s2, regex2, "$1"); //$n,获取第n组中的内容 }
public static void myReplace(String str, String regex, String newStr){
str = str.replaceAll(regex, newStr);
System.out.println(str);
}
}

输出结果:

abcc*ffg333hi*
abcdefg

(4)获取:将字符串中符合规则的子串取出

步骤:将正则表达式封装成对象

   让正则表达式和要操作的字符串相关联

   关联后,获取正则匹配的引擎

   通过引擎对符合规则的子串进行操作,比如取出

 import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Demo{
public static void main(String[] args) {
String str = "jin tian xing qi ji";
String regex = "\\b[a-z]{4}\\b"; // \b单词边界 //将规则封装成对象
Pattern p = Pattern.compile(regex); //让正则对象和要作用的字符串相关联。获取匹配器对象
Matcher m = p.matcher(str); //讲规则作用在字符串上,并进行符合规则的子串查找
while(m.find()){
System.out.println(m.group());
}
}
}

输出结果:

tian
xing

例:

将下列字符串转成:大家早上好

将已有字符串变成另一个字符串,使用替换功能,可以先将 . 去掉,再将多个重复的内容变成单个内容

 public class Demo{
public static void main(String[] args) {
test();
}
public static void test(){
String s = "大大大...家家家家家家家..早早早...上上上上上上上..好好";
s = s.replaceAll("\\.+", "");
s = s.replaceAll("(.)\\1+", "$1");
System.out.println(s);
}
}

将ip地址进行地址段顺序排序:

按照字符串自然顺序,只要让它们每一段都是3位即可。

(1) 按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位

(2) 将每一段只保留3位。这样。所有的ip地址都是每一段3位

 import java.util.TreeSet;

 //import java.util.Arrays;

 public class Demo{
public static void main(String[] args) {
test();
}
public static void test(){
String ip = "192.68.1.254 102.49.23.13 10.10.10.10 2.2.2.2 8.109.90.30";
//取一连串连续数字,并在数字前加00
ip = ip.replaceAll("(\\d+)", "00$1"); //将以0开头(没有或多个)的,并3个数字结尾的一连串数字,替换成后三个数字。如002->002, 0010->010, 00192->192
ip = ip.replaceAll("0*(\\d{3})", "$1"); String[] arr = ip.split(" ");
//Arrays.sort(arr);
TreeSet<String> ts = new TreeSet<String>();
for(String s : arr){
ts.add(s);
}
for(String s : ts){
System.out.println(s.replaceAll("0*(\\d+)", "$1"));
}
}
}

输出结果:

2.2.2.2
8.109.90.30
10.10.10.10
102.49.23.13
192.68.1.254

对邮件地址进行校验:

 public class Demo{
public static void main(String[] args) {
test();
}
public static void test(){
String mail = "abc12@sina.com.cn";
String regex = "\\w+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}";
System.out.println(mail.matches(regex));
}
}

Java笔记(十)的更多相关文章

  1. Java笔记(十九)……多线程

    概述 进程: 是一个正在执行中的程序 每一个进程执行都有一个执行顺序,该执行顺序是一个执行路径,或者叫一个控制单元 线程: 就是进程中的一个独立的控制单元,线程在控制着进程的执行 一个进程中至少有一个 ...

  2. Java笔记(十八)……包

    概述 对类文件进行分类管理. 给类提供多层命名空间. 写在程序文件的第一行. 类名的全称的是 包名.类名. 包也是一种封装形式. 访问权限 引用<The Complete Reference&g ...

  3. Java笔记(十五)……面向对象IV多态(polymorphism)

    概述 定义:某一类事物的多种存在形态. 例:动物中猫,狗. 猫这个对象对应的类型是猫类型 猫 x = new 猫(); 同时猫也是动物中的一种,也可以把猫称为动物. 动物 y = new 猫(); 动 ...

  4. Java笔记(十四)……抽象类与接口

    抽象类概念 抽象定义: 抽象就是从多个事物中将共性的,本质的内容抽取出来. 例如:狼和狗共性都是犬科,犬科就是抽象出来的概念. 抽象类: Java中可以定义没有方法体的方法,该方法的具体实现由子类完成 ...

  5. Java笔记(十二)……类中各部分加载顺序及存放位置问题

    什么时候会加载类 使用到类中的内容时加载,三种情况: 创建对象:new StaticDemo(); 使用类中的静态成员:StaticCode.num = 9;  StaticCode.getNum() ...

  6. java笔记十:java中的反射

    Java中,反射是一种强大的工具.它使您能够创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代表链接.反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而 ...

  7. Java笔记(十六)……内部类

    内部类概述 内部类是将一个类定义在另一个类里面,对里面那个类就成为内部类(内部类,嵌套类). 当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物在使用外部事物的内容 访问特点 内部类 ...

  8. Java笔记(十)……面向对象II封装(Encapsulation)

    封装概念 封装: 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处: 将变化隔离. 便于使用. 提高重用性. 提高安全性. 封装原则: 将不需要对外提供的内容都隐藏起来. 把属性都隐藏,提 ...

  9. java jvm学习笔记十(策略和保护域)

    欢迎转载请说明出处:http://blog.csdn.net/yfqnihao/article/details/8271415 前面一节,我们做了一个简单的实验,来说明什么是策略文件,在文章的最后,也 ...

  10. python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

随机推荐

  1. mac 当前位置打开终端

    做开发时经常会遇到在当前目录打开终端的情况,一直都是先启动终端,然后再切换到当前目录,今天发现了一个新的方法,虽然不是一步到位,但比以前快多了.   工具/原料   mac系统 苹果电脑 方法/步骤 ...

  2. SilverLight-DataControls:四、The PagedCollectionView(分页的集合视图) 对象

    ylbtech-SilverLight-DataControls-PagedCollectionView:The PagedCollectionView(分页的集合视图) 对象 1.A, Buildi ...

  3. Qt中QVector与QList的应用

    首先來看看QVector 的基本使用方式,建立一個可容納兩個元素的QVector ,並使用索引方式存取元素值:QVector<double> vect(2); vect[0] = 1.0; ...

  4. sql的一些知识_函数_汇总数据

    汇总数据 avg()---------求平均数 值得注意的是:avg()只能用于一个列的平均值查询,多个列的平均值请使用多个avg() avg()忽略null值 count()-------计数(指定 ...

  5. vue2.0 自定义过滤器

    2.0中已经废弃了过滤器,需要我们自定义 <div id="app"> {{message|uppercase}} </div> //过滤器 Vue.fil ...

  6. vs升级c++项目遇到的一些问题

    1.error C1189: #error :  This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x ...

  7. Python遍历列表

    #循环遍历列表 nums = [ss,gg,e,fff,bb] #while循环遍历,但是不推荐使用,因为还要把列表的元素数出来 i = 0 while i<5: print(nums[i]) ...

  8. SpringMVC学习(一):搭建SpringMVC-注解-非注解

    文章参考:http://www.cnblogs.com/Sinte-Beuve/p/5730553.html 一.环境搭建: 目录结构: 引用的JAR包: 如果是Maven搭建的话pom.xml配置依 ...

  9. poj3040(双向贪心)

    Allowance Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1540   Accepted: 637 Descript ...

  10. Hibernater中的持久化对象以及状态转换

    一.持久化对象的要求 1.提供一个无参的构造器:使Hibernate可以使用Constructor.newInstance() 来实例化持久化类. 2.提供一个标识属性(identifier prop ...