1.使用代码来判断字符串

场景:

  • 判断字符串是否是有效的电话号码:"010-12345678", "123ABC456"
  • 判断字符串是否是有效的电子邮箱地址:"test@example.com", "test#example"
  • 判断字符串是否是有效的时间:"12:34", "99:99"

通过程序判断需要为每种判断创建规则,然后用代码实现:

示例1:判断手机号

Phone.java

package com.testList;

public class Phone{
public boolean isVaildMobile(String s){
if (s.length() != 11){
return false;
}
for(int i=0;i<s.length();i++){
char c = s.charAt(i);
if ( c<'0' || c > '9'){
return false;
}
}
return true;
}
}

PhoneTest.java

package com.testList;

import org.junit.After;
import org.junit.Before;
import org.junit.Test; import static org.junit.Assert.*; public class PhoneTest {
Phone phone;
@Before
public void setUp(){
phone = new Phone();
}
@Test
public void isVaildMobile() {
System.out.println(phone.isVaildMobile("13311112222"));
}
@After
public void tearDown(){
phone = null;
}
}

2.正则表达式的优势

如果用代码来实现各种判断,就要为每种判断创建规则,如判断邮箱、日期、时间,会相当麻烦。

正则表达式可以用字符串来描述规则,并用来匹配字符串。如上例中手机号的校验

package com.testList;

public class Phone{
public boolean isVaildMobile(String s){
String rule = "\\d{11}";
return s.matches(rule);
}
}

使用正则表达式的好处:

  • 一个正则表达式就是一个描述规则的字符串
  • 只需要编写正确的规则,就可以让正则表达式引擎去判断目标字符串是否符合规则
  • 正则表达式是一套标准,可以用于任何语言
  • JDK内置正则表达式引擎:java.util.regex

    Phone.java
package com.testList;

public class Phone{
public static boolean isCentury20th(String s){
if(s == null){
return false;
}
String rule = "19\\d\\d";
return s.matches(rule);
}
}

PhoneTest.java

package com.testList;

import org.junit.After;
import org.junit.Before;
import org.junit.Test; import static org.junit.Assert.*; public class PhoneTest {
@Test
public void testIsCentury20th(){
assertTrue(Phone.isCentury20th("1900"));
assertTrue(Phone.isCentury20th("1901"));
assertTrue(Phone.isCentury20th("1922"));
assertTrue(Phone.isCentury20th("1948"));
assertTrue(Phone.isCentury20th("1901"));
assertTrue(Phone.isCentury20th("1999")); assertFalse(Phone.isCentury20th(null));
assertFalse(Phone.isCentury20th(""));
assertFalse(Phone.isCentury20th(" "));
assertFalse(Phone.isCentury20th("19"));
assertFalse(Phone.isCentury20th("190"));
assertFalse(Phone.isCentury20th("190A"));
assertFalse(Phone.isCentury20th("19001"));
assertFalse(Phone.isCentury20th("1900s"));
assertFalse(Phone.isCentury20th("2900"));
assertFalse(Phone.isCentury20th("A900"));
}
}

3.总结:

正则表达式是一个字符串

正则表达式用字符串描述一个匹配规则

使用正则表达式可以快速判断给定的字符串是否符合匹配规则

Java内建正则表达式java.util.regex

廖雪峰Java9正则表达式-1正则表达式入门-1正则表达式简介的更多相关文章

  1. 廖雪峰Java9正则表达式-1正则表达式入门-2正则表达式匹配规则

    正则表达式的匹配规则: 从左到右按规则匹配 匹配规则及示例 可以匹配 不能匹配 "abc" "abc" 不能匹配:"ab", "A ...

  2. 廖雪峰Java9正则表达式-2正则表达式进阶-3分组匹配

    1.使用括号可以提取字符串 不加括号匹配电话号码 匹配成功后,如何提取想要的字符串? 使用(...)可以分组:"^(\d{3,4})\-(\d{6,8})$" 2.String.m ...

  3. 廖雪峰Java9正则表达式-2正则表达式进阶-6搜索和替换

    1.使用正则表达式分割字符串: String[] string.split(String regex); "a b c".split("\\s");->[ ...

  4. 廖雪峰Java9正则表达式-2正则表达式进阶-5非贪婪匹配

    1.贪婪匹配 问题:给定一个字符串表示的数字,判断该数字末尾0的个数? "123000": 3个0 "10100": 2个0 "1001": ...

  5. 廖雪峰Java15JDBC编程-1关系数据库基础-1关系数据库简介

    1.数据库 1.1 定义 数据库是按照数据结构来组合.存储和管理数据的软件. 1.2 数据库模型 数据库有层次模型.网状模型.关系模型三种模型. 2 关系数据库 关系数据库是建立在关系模型上的数据库, ...

  6. 爬取廖雪峰的python3教程

    从廖雪峰老师的python教程入门的,最近在看python爬虫,入手了一下 代码比较low,没有用到多线程和ip代理池 然后呢,由于robots.txt的限定,构建了一些user-agent,并放慢的 ...

  7. [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门

    [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...

  8. 正则表达式30分钟入门教程<转载>

    来园子之前写的一篇正则表达式教程,部分翻译自codeproject的The 30 Minute Regex Tutorial. 由于评论里有过长的URL,所以本页排版比较混乱,推荐你到原处查看,看完了 ...

  9. python3爬虫之入门和正则表达式

    前面的python3入门系列基本上也对python入了门,从这章起就开始介绍下python的爬虫教程,拿出来给大家分享:爬虫说的简单,就是去抓取网路的数据进行分析处理:这章主要入门,了解几个爬虫的小测 ...

随机推荐

  1. Python 多进程和多线程的效率对比

    import time from threading import Thread from multiprocessing import Process def f1(): # time.sleep( ...

  2. 【Python】*args和**kwargs的区别

    1.*args表示将参数作为元组传给函数 通过一个函数的定义来理解’*args’的含义 修改函数的定义: >>> def fun(*args): ... print args ... ...

  3. ios 视图既显示阴影又有圆角实现

    //- (UIView *)createTimeBG //{ //    UIView *view = [[UIView alloc]init]; //    view.backgroundColor ...

  4. java.lang.NullPointerException错误的解决方案

    java.lang.NullPointerException空指针异常是像我一样新手很容易出现的问题,这个问题一般情况都是不细心的时候出现的,开始正文如下: 1.业务层面的错误: a.没有写非空验证: ...

  5. thinkphp5.0引入类

    /application/index/controller/Test.php <?php namespace app\index\controller; 当前命名空间名称 use think\C ...

  6. Golang中的函数

    函数 在go语言中,函数的基本组成为:关键字func.函数名.参数列表.返回值.函数体和返回语句 函数的定义 定义一个最简单的加法函数 func Add(a int,b int)(ret int,er ...

  7. Altium Designer 10 使用技巧

    一.封装文件.PCB文件编辑时的吸附(Snap)的灵敏度. 像焊盘中心.过孔中心.线段的端点.走线的端点.铺铜的顶点,这样的点有吸附光标的特性,鼠标移动到这些点的附近会被吸附到上面.Snap的灵敏度可 ...

  8. 数据分析处理库--Pandas

    Pandas库: pandas索引与计算:

  9. es6学习笔记-Proxy、Reflect、Promise

    Proxy Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程. Proxy 可以理解成,在目标对象之前 ...

  10. s21day15 python笔记

    s21day15 python笔记 一.内容回顾及补充 回顾 补充 range / xrange(python2与python3的区别六) python2: xrange:不会在内存中立即创建,而是在 ...