JAVA正则表达式

实际开发中,经常需要对字符串数据进行一些复杂的匹配,查找,替换等操作。

通过"正则表达式",可以方便的实现字符串的复杂操作。

正则表达式是一串特定字符,组成一个"规则字符串",这个"规则字符串"是描述文本规则的工具。正则表达式就是记录文本规则的代码。

例如:

正则表达式:"[a-z]"表示a到z的任意一个字符。

正则表达式:"[a-z]"表示由1个或多个a-z字符组成的字符串。

      字符集合

正则表达式 说明
[abc] a、b、c中任意一个字符
[^abc] 除了a、b、c的任意字符
[a-z] a、b、c、......、z中的任意一个字符
[a-zA-Z0~9] a~z、A~Z、0~9中任意一个字符
[a-z&&[^bc]] a~z中除了b和c以外的任意一个字符,其中&&表示"与"的关系

 预定义字符集

正则表达式 说明
. 任意一个字符
\d 任意一个数字字符,相当于[0-9]
\w 单词字符,相当于[a-zA-Z0-9_]
\s 空白字符,相当于[\t\n\x0B\f\r]
\D 非数字字符
\W 非单词字符
\S 非空白字符

          数量词

正则表达式 说明
X? 表示0个或1个X
X* 表示0个或任意多个X
X+ 表示1个到任意多个X(大于等于1个X)
X{n} 表示n个X
X{n, } 表示n个到任意多个X(大于等于n个X)
X{n,m} 表示n个到m个X

检索邮政编码

规则为6位数字

第一种匹配规则 [0-9][0-9][0-9][0-9][0-9]

简化第一种规则 \d\d\d\d\d

简化第二种规则 \d{6}

分组()

分组:()圆括号表示分组,可以将一系列正则表达式看作一个整体,分组时可以使用“|”表示“或”的关系。

例如:匹配手机号码面前的区号:

(\+86|0086)?\s?\d{11}

圆括号表示这里需要出现" +86"或者"0086"

 检索手机号码:+8613838389438

+86 可有可无

+86与后面的号码直接空格可以没有或者有多个

电话号码为11位数字

"^"和"$"

^:代表字符串开始。

$:代表字符串结束。

 例如:匹配用户名规则-从头到尾连续8~10个单词字符

\w{8,10}

^\w{8,10}$

· 如果使用第一种写法,则"abcd1234_abcd"是可以验证通过的;

· 使用第二种写法由于有从头到尾整体的限定,则验证不能通过。

String正则API

matches方法

matches(正则表达式)方法:将一个字符串与正则表达式进行匹配。

如果匹配成功就返回true,否则返回false。

 /** 测试email是否合法 */
public void email(){
String emailRegEx="^[a-zA-Z0-9_.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,4}$";
String email="sdf@itkzhan.com.cn";
System.out.println(email.matches(emailRegEx));
}

split方法

String类的split()方法可以将字符串按照特定的分隔符分成字符串数组。

String[] split(String regex) 参数regex为正则表达式,以regex所表示的字符串为分隔符,将字符串拆分成字符串数组。

数据:"3,itkzhan, 3,  itkzhan@itkzhan.com,33"

拆分为:["3"," itkzhan","  3"," itkzhan@itkzhan.com,"," 33"]

拆分方式:str.split(",\\s*");

解释:以逗号开头,>=0个的空格组合为分割

    /** 使用split方法拆分字符串 */
public void testSplit(){
//按空格拆分
String str="java cpp php c# objective-c";
String[] strArr=str.split("\\s");
System.out.println(Arrays.toString(strArr)); //按+、-、=符号拆分
String line="100+200-150=150";
strArr=line.split("[\\+\\-=]";
System.out.println(Arrays.toString(strArr));
}

 replaceAll方法

String提供了同于字符串替换的方法:

String replaceAll(String regex,String replacement) 将字符串匹配正则表达式regex的字符串替换成replacement。

 /** 使用replaceAll方法实现字符串替换 */
@Test
public void testReplaceAll(){
//将str中的所有数字替换为"数字"二字
String str="abc123bcd45ef6f7890";
str=str.replaceAll("\\d+","数字");
System.out.println(str);
}

Object

在java类继承结构中,java.lang.Object类位于顶端。

如果定义一个Java类时i没有使用exends关键字声明父类,则父类默认继承为java.lang.Objet类

Obeject类型的引用变量可以指向任何类型对象。

toString方法 

如何重写toString方法 

Object类中的重要方法,用于返回对象值的字符串表示;

原则上建议重写,格式大多数遵循 "类的名字[域值]",例如:

    public String toString(){
return getClass().getName()
+"[name="+name
+",salary="+salary
+",gender="+gender
+"]";
}

Java语言中很多地方会默认调用对象的toString方法:

字符串+对象,自动调用对象的toString方法

System.out.print(任意对象),直接调用toString方法

如果不重写toString方法,将使用Object的toString方法,逻辑为:

类名@散列码

toString方法时非常有用的调式工具

JDK中的标准类库中,许多类都定义了toString方法,方便用户获得有关对象状态的必要信息:

自定义的每一个类增加toString方法。

String重写toString方法

String的toString()方法就是将自身返回。

    public String toString(){
return this;
}

equals方法

Object中的equals方法,作用在于检测一个对象是否等于另一个对象;

在Object类中,这个方法判断两个对象是否具有相同的引用,即是否为相同的对象;

在实际开发中,一般需要重写该方法,下面代码在cell1和cell2指向同一个对象时才为true,可以将其重写为:当x和y坐标相等时两个对象即相等,这样更有意义一些。

cell1.equals(cell2);

  public boolean equals(Object obj){
if(obj==null){
return false;
}
if(this==obj){
return true;
}
if(obj instanceof Cell){
Cell cell=(Cell)obj;
return cell.row==row&&cell.col==col;
}else{
return false;
}
}

String重写equals方法

String的equals方法用于比较两个字符串对象的字符序列是否相等。

    /** 测试字符串的比较 */
public class Demo{
public static void main(String[] args){
String s1=new String("abc");
String s2=new String("abc");
String s3=new String("A"); System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s3));//false
}
}

equals和==的区别?

==用于比较变量的值,可以用于任何类型,入股票用于引用类型,比较的时两个引用变量中存储的值(地址信息),判断两个变量是否指向相同的对象。

equals是Object的方法,重写以后,可以用于比较两个对象的内容是否“相等”;

注意:

Obejt默认的equals方法比较规则和==相同。

包装类

概述:

在进行类型转换的范畴内,由一种特殊的转换,需要将int这样的基本数据类型转换成对象;

所有基本类型都有一个于之对应的类,即包装类。

包装类是不可改变类,在构造了包装类对象后,不允许更改包装在其中的值;

包装类是final的,不能定义他们的子类。

基本类型 基本类型 父类
int java.lang.Integer java.lang.Number
long java.lang.Long java.lang.Number
double java.lang.Double java.lang.Number
short java.lang.Short java.lang.Number
float java.lang.Float java.lang.Number
byte java.lang.Byte java.lang.Number
char java.lang.Character java.lang.Object
boolean  java.lang.Boolean java.lang.Object

8中基本数据类型包装类

Integer类

Integer 类在对象中包装了一个基本类型 int 的值。

Integer 类对象包含一个 int 类型的字段。

此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法

注意:

在实现将字符串转换为 int 类型数值的过程中,如果字符串中包含非数值类型的字符,则程序执行将出现异常。

Float类

Float 类在对象中包装了一个基本类型 float 的值。

Float 类对象包含一个 float 类型的字段。

此外,该类提供了多个方法,能在 float 类型与 String 类型之间互相转换,同时还提供了处理 float 类型时比较常用的常量和方法。

注意:

在实现将字符串转换为 float 类型数值的过程中,如果字符串中包含非数值类型的字符,则程序执行将出现异常。

Double类

Double 类在对象中包装了一个基本类型 double 的值。

Double 类对象包含一个 double 类型的字段。

此外,该类还提供了多个方法,可以将 double 类型与 String 类型相互转换,同时 还提供了处理 double 类型时比较常用的常量和方法。

注意:

在将字符串转换为 double 类型的数值的过程中,如果字符串中包含非数值类型的字符,则程序执行将出现异常。

Byte类

Byte 类将基本类型为 byte 的值包装在一个对象中。

一个 Byte 类的对象只包含一个类型为 byte 的字段。

此外,该类还为 byte 和 String 的相互转换提供了方法,并提供了一些处理 byte 时非常有用的常量和方法。

注意:

必须使用数值型的 String 变量作为参数才能创建成功,否则会抛出 NumberFormatException 异常。

Boolean类

Boolean 类将基本类型为 boolean 的值包装在一个对象中。

一个 Boolean 类的对象只包含一个类型为 boolean 的字段。

此外,此类还为 boolean 和 String 的相互转换提供了很多方法,并提供了处理 boolean 时非常有用的其他一些常用方法。

Char类

Character 类是字符数据类型 char 的包装类。

Character 类的对象包含类型为 char 的单个字段,这样能把基本数据类型当对象来处理。

Number类

Number 是一个抽象类,也是一个超类(即父类)。

Number 类属于 java.lang 包,所有的包装类(如 Double、Float、Byte、Short、Integer 以及 Long)都是抽象类 Number 的子类。

抽象类不能直接实例化,而是必须实例化其具体的子类。

System类

System 类代表系统,系统级的很多属性和控制方法都放置在该类的内部。

该类位于 java. lang 包。由于该类的构造方法是 private 的,所以无法创建该类的对象,也就是无法实例化该类。

System 类中提供了一些系统级的操作方法,常用的方法有 arraycopy()、currentTimeMillis()、exit()、gc() 和 getProperty()。

1. arraycopy() 方法

语法:

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)

该方法的作用是数组复制,即从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

2.currentTimeMillis() 方法

语法:

long m=System.currentTimeMillis();

该方法的作用是返回当前的计算机时间,时间的格式为当前计算机时间与 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒所差的毫秒数。

3. exit() 方法

语法:

public static void exit(int status) 

该方法的作用是终止当前正在运行的 Java 虚拟机。

4.gc() 方法

语法:

public static void gc()

该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,取决于系统中垃圾回收算法的实现以及系统执行时的情况。

5. getProperty() 方法

语法:

public static String getProperty(String key)

该方法的作用是获得系统中属性名为 key 的属性对应的值。

常见属性:

属性名 属性说明
java. version Java 运行时琢境版本
java.home Java 安装目录
os.name 操作系统的名称
os.version 操作系统的版本
user.name 用户的账户名称
user.home 用户的主目录
user, dir 用户的当前工作目录

Number和主要方法

抽象类Number是Byte,Double,Float,Integer,Long和Short类的父类;

Number的子类必须提供将表示的数值转换成byte,double,float,int,long和short的方法;

doubleValue()以double形式返回指定的数值

intValue()以int形式返回指定的数值

floatValue()以float形式返回值定的数值

/** 测试Number的intValue方法和doubleValue方法 */
public void testIntValueAndDoubleValue(){
Number d=123.45;
Number n=123;
//输出d和n对象所属的类型
System.out.println(d.getClass().getName());//java.lang.Double
System.out.println(n.getClass().getName());//java.lang.Integer int intValue=d.intValue();
double doubleValue=d.doubleValue();
System.out.println(intValue+","+doubleValue);//123,123.45 intValue=n.intValue();
doubleValue=n.doubleValue();
System.out.println(intValue+","+doubleValue);//123,123.0
}

Integer常用功能

Integer的静态方法parseInt用于将字符串转换成int。

   /** String转换为int */
public void testParseInt(){
String str="123";
int value=Integer.parseInt(str);
System.out.println(value);//
str="水电费";
//会抛出NumberFormatException
//value=Integer.parseInt(str);
}

如果字符串的格式不是整数形式,将无法转换。

Double常用功能

  /** String转换为double */
public void testParseDouble(){
String str="12345.00";
double value=Double.parseDouble(str);
//12345.0
System.out.println(value); str="¥12345.00"; //会抛出NumberFormatException
//value=Double.parseDouble(str);
}

自动装箱和拆箱操作

 Integer a=100;    //装箱

        Integer b=200;    //装箱

        Integer c=a+b;    //拆箱再装箱

        double d=c;    //拆箱

装箱和拆箱是“编译器”认可的,而不是虚拟机。编译器在生成类的字节码是插入必要的方法调用

 Integer a=100 => Integer a=Integer.valueOf(100)

        Integer b=200 => Integer b=Integer.valueOf(200)

        Integer c=a+b=>Integer c=Integer.valueOf(a.intValue()+b.intValue())

        int d=c =>int d=c.intValue()

小秘诀:

当一种类型转换成另一种类型时调用:

转换后类型=转换之前类型.parse转换后类型(变量名);

Day02:正则表达式 / Object / 包装类的更多相关文章

  1. JAVASE02-Unit02: 正则表达式 、 Object 、 包装类

    正则表达式 . Object . 包装类 字符串支持正则表达式的方法一: package day02; /** * 字符串支持正则表达式的方法一: * boolean matches(String r ...

  2. API和正则表达式

    第一章 String & StringBuilderString类用类final修饰,不能被继承,String字符串被创建后永远无法被改变,但字符串引用可以重新赋值,改变引用的指向java字符 ...

  3. Java 之常用API(二)

    Object类 & System类 日期相关类 包装类 & 正则表达式 Object类 & System类 1.1 Object类 1.1.1 概述 Object类是Java语 ...

  4. java核心API

    ---恢复内容开始--- Javase01 day01 关于String: String是不可变对象,java.lang.String使用了final修饰,不能被继承: 字符串一旦创建永远无法改变,但 ...

  5. 莫逸风CSDN文章目录

    『Ⅱ』-----随笔 莫逸风CSDN文章目录 The Programmer's Oath程序员的誓言-- 今天突发奇想写了一个小工具,CSDN文章目录生成器 vue去掉一些烦人的校验规则 输入npm ...

  6. Spring jdbc 对象Mapper的简单封装

    一般查询实体的时候,都需要这么使用/**      * 根据id查询      *       * @return      */     public Emp queryEmpById(Intege ...

  7. 【bird-front】全自动数据表格组件bird-grid

    bird-grid是bird-front前端框架中实现的全自动数据表格组件.组件内部处理数据加载.分页.排序.查询.新增.编辑等一系列操作.让业务表格的开发从繁复的增删查改中脱离出来,编码简洁却又功能 ...

  8. C# textbox中输入时加限制条件 // C#Winform下限制TextBox只能输入数字 // 才疏学浅(TextBox 小数点不能在首位+只能输入数字)

    textbox中输入时加限制条件 分类: C# winform2008-08-26 08:30 306人阅读 评论(0) 收藏 举报 textbox正则表达式object 1.用正则表达式! 2.使用 ...

  9. 201871010112-梁丽珍《面向对象程序设计(java)》第四周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...

随机推荐

  1. P1081 [NOIP2012]开车旅行[倍增]

    P1081 开车旅行    题面较为啰嗦.大概概括:一个数列,只能从一个点向后走,两种方案:A.走到和自己差的绝对值次小的点B.走到和自己差的绝对值最小点:花费为此差绝对值:若干询问从规定点向后最多花 ...

  2. 有关 CMMI

    CMMI的全称为Capability Maturity Model Integration,即能力成熟度模型集成.CMMI是CMM模型的最新版本.早期的CMMI(CMMI-SE/SW/IPPD),SE ...

  3. python学习_新闻联播文字版爬虫(V 1.0.1版)

    更新记录: 1.新增了headers头的随机获取: 2.新增了logging模块添加日志信息(学习用): #!/usr/bin/env python # -*- coding: utf-8 -*- ' ...

  4. 在github新建一个项目里需要哪些文件及作用

    1.README.md文件 关于项目的介绍和使用方法. 2.  .gitignore文件 上传项目时不需要传的文件,最常用的就是“node_modules/",如下: 详细的介绍可以去git ...

  5. Log4net日志文件自动按月份存放和日志独占问题的解决

    让log4net日志文件自动按月份存放 log4net日志文件的作用还真不小,可以保存管理员.用户对数据库的任何操作,保存管理员和用户的登录记录,分析系统运行错误,所以不舍得随便将日志文件Delete ...

  6. Java多线程和并发(八),synchronized底层原理

    目录 1.对象头(Mark Word) 2.对象自带的锁(Monitor) 3.自旋锁和自适应自旋锁 4.偏向锁 5.轻量级锁 6.偏向锁,轻量级锁,重量级锁联系 八.synchronized底层原理 ...

  7. CPU风扇转速异常

    本文适用于Ubuntu 16.04,造冰箱的大熊猫@cnblogs 2018/10/9 近日发现一个问题,新笔记本的CPU风扇转速很高.笔记本刚刚启动,就能听到风扇呼呼的声音,转速高的异常.以前不是这 ...

  8. 实体字符转换,同样变量密码加盐MD5后生成的加密字符串不同解决办法 (原)

    我是首次登录系统自动生成一个密码,格式大概是:   abcd1234&  这种格式 , 比如加密规则就是一个 MD5() 然后,首次账号密码登录,输入密码 abcd1234&,一直提示 ...

  9. JS框架_(JQuery.js)圆形多选菜单选项

    百度云盘 传送门 密码:zb1c 圆形多选菜单选项效果: <!DOCTYPE html> <html lang="en" > <head> &l ...

  10. 我的 CSDN 博客目录索引(主要记录了我学习视频、书籍的笔记,持续更新中)

    我的 CSDN 博客地址: lw_power的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/lw_power 佟刚老师<Spring4视频教程>学习笔记 ...