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. WebView net::ERR_CLEARTEXT_NOT_PERMITTED&&net::ERR_INTERNET_DISCONNECTED

    参照博客:https://blog.csdn.net/qq_33721320/article/details/84400825 测试Android 中WebView功能时,发现了这个问题: 解决的方式 ...

  2. HTTP与TCP的区别和联系(转)

    https://www.cnblogs.com/baizhanshi/p/8482612.html

  3. 【BZOJ4031】【Luogu P4111】[HEOI2015]小Z的房间

    裸的矩阵树定理.求行列式的时候答案要在中间统计,因为交换两个行会使答案取反. #include <bits/stdc++.h> using namespace std; const int ...

  4. jquery $(".classc",$(".classp"))的含义

    jquery中有一种选择器的写法为:$(".classc",$(".classp")),注意,是$()中又嵌套了一个$(),这种写法的作用类似于$(" ...

  5. k8s命令自动补全

    Linux yum install -y bash-completion source /usr/share/bash-completion/bash_completion source <(k ...

  6. jquery die()方法 语法

    jquery die()方法 语法 作用:die() 方法移除所有通过 live() 方法向指定元素添加的一个或多个事件处理程序.直线电机参数 语法:$(selector).die(event,fun ...

  7. python 数据库更新操作

    数据库更新操作 更新操作用于更新数据表的的数据,以下实例将 EMPLOYEE 表中的 SEX 字段为 'M' 的 AGE 字段递增 1: #!/usr/bin/python # -*- coding: ...

  8. Clojure的引用类型:var,ref,agent和atom

    作为其他值的容器,也都可以解引用. deref不会阻塞. add-watch (add-watch reference key fn) 可以定义引用值发生改变时的回调,fn是4个参数 :key (at ...

  9. 【杂题】[CodeForces 1172D] Nauuo and Portals【构造】

    Description 有一个n*n的网格,你需要在上面设置一些传送门,传送门由两个配对的格子组成,从一个进入会立刻从另一个同一方向出来. 现在有n个人从第1列出发向右走,位于(i,1)的人要走到(r ...

  10. hexo的流程

    1.基于node 的npm包管理工具2.npm install -g hexo(hexo-cli)3.下载的资源是国外的可能比较慢,可以使用淘宝镜像(代理的仓库)npm install -g hexo ...