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_在Ubuntu中搭建科学计算环境

    本文针对 Ubuntu 下搭建 Python 科学计算的环境,罗列了关键词和部分链接,最后附上了自己的一点分享. 1.升级 关键词: python ubuntu 升级 推荐: ubuntu16.04下 ...

  2. Python标准库之textwrap模块

    textwrap通过调整换行符的位置来格式化文本:以下是全部方法 __all__ = ['TextWrapper', 'wrap', 'fill', 'dedent', 'indent', 'shor ...

  3. win11.2.0.4lsnrctl status hang

    以前听客户说监听日志大于4G,监听出现问题.本次另一个客户也出现这个问题,表现为监听lsnrctl start,status长久hang住 匹配mos WINDOWS: Listener Hangs ...

  4. Window 下载Android系统源代码

    第一步:使用命令下载manifest文件夹 git clone https://aosp.tuna.tsinghua.edu.cn/ 第二步:进入文件夹,打开default.xml文件并找到自己要下载 ...

  5. C++实验五

    #include <iostream> #include <vector> #include <string> using namespace std; // 函数 ...

  6. java第三章笔记

    java的基本程序设计结构: 1. 声明一个变量之后,必须用赋值语句对变量进行显示初始化,千万不能使用未被初始化的变量. 2.在java中不区分变量的声明与定义. 3.当参与/运算的两个操作数都是整数 ...

  7. Java面试3

    反射的定义: 反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作.例如它允许一个java的类获取它所有的成员变量和方法并且显示出来. 反射机制的 ...

  8. JDK新特性之可变个数的形参的方法

    可变个数的形参的方法:1.格式:对于方法的形参来说:数据类型...形参名2.可变个数的形参的方法与同名的方法之间可以构成重载3.可变个数的形参在调用时,个数从0开始,到无穷都可以(在调用这个方法时,s ...

  9. github 出现 Permission denied (publickey)

    首先,清除所有的key-pairssh-add -Drm -r ~/.ssh删除你在github中的public-key 用下面的命令生成public key $ ssh-keygen -t rsa ...

  10. cf352E Jeff and Brackets dp+矩阵快速幂(加法+min运算)

    题意大致是这样的,一共要放 m 段括号序列,每一段放 n 个括号,也就是放 n*m个括号,再每一段中的 n 个位置分别有放左括号和右括号的代价,问最终摆放出合法的括号序列的最小代价是多少. 另外保证, ...