package com.正则表达式;

import java.util.Scanner;

/**
*
* 校验qq号码
* 1:要求必须是5-15位数字
* 2: 0不能开头
* 分析:
* A:键盘录入qq号码
* B:写一个功能
* C:调用功能,输出结果
*
*/
public class RegexDemo {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的qq号码:");
String qq=sc.nextLine();
System.out.println("checkQQ:"+checkQQ(qq));
}
/**
* 写一个实现校验
* 两个明确:
* 返回值类型:boolean
* 参数列表:String qq
*/ public static boolean checkQQ(String qq){
boolean flag=true;
if(qq.length()>=5 && qq.length()<=15){//位数
if(!qq.startsWith("0")){//开头
char[] cha=qq.toCharArray();
for(int i=0;i<cha.length;i++){//内容
if(!Character.isDigit(cha[i])){
flag=false;
break;
}
}
}else{
flag=false;
}
}else{
flag=false;
}
return flag;
}
}

引入正则

package com.正则表达式;

import java.util.Scanner;

/**
*
* 正则表达式:符合一定规则的字符串
*
*/
public class RegexDemo2 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的qq号码:");
String qq=sc.nextLine();
System.out.println("checkQQ:"+checkQQ(qq));
} public static boolean checkQQ(String qq){
//String regex="[1-9][0-9]{4,14}";
//public boolean matches(String regex) 告知此字符串是否匹配正则表达式
//boolean flag=qq.matches(qq);
return qq.matches("[1-9][0-9]{4,14}");
}
}

引入正则2

正则表达式要求:

A:字符
x 字符x。举例:‘a’表示字符a
\\ 反斜线字符
\n 换行符('\u000A')
\r 回车符('\u000D')
B:字符类
[abc] a、b或者c(简单类)
[^abc] 除了abc外的其他一个字符
[a-zA-Z] a到z或A到Z,两头的字母都包括在内
[0-9] 0-9内的字符都包括
C:预定义字符类
.表示任何字符。表示本身使用\转义
\d 数字0-9,[0-9]
\D 非数字
\s 非空白字符
\S 非空白字符
\w 单词字符:[a-zA-Z_0-9]
在正则表达式里面组成单词的东西必须由这些东西组成
D:边界字符
^ 行的开头
$ 行的结尾
\b 单词字符
就是不是单词字符的地方
举例:hello world?haha;xixi
E:数量词
X? X出现0次或者一次
X* X出现0次或者多次
X+ X出现1次或多次
X{n} X出现恰好n次
X{n,} X出现至少n次
X{n,m} X出现至少n次,但是不超过m次
F:字符集
字面值转义 \x
分组 [...]
范围 a-z
并集 [a-e][i-u]
交集 [a-z&&[aeiou]]
package com.正则表达式._2;

import java.util.Scanner;

/*
*
* 判断功能
* String类的public boolean matches(String regex)
*
* 需求:
* 判断手机号码是否满足功能
* 分析:
* A:键盘录入手机号码
* B:定义手机号码的而规则
* 1开头,11位数,全部数字
* C:调用功能,判断即可
* D:输出结果
* 需求:
* 校验邮箱
* 分析:
* A:键盘录入手机号码
* B:定义邮箱的规则
* 1开头,11位数,全部数字
* C:调用功能,判断即可
* D:输出结果
*/
public class RegexDemo01 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入邮箱:");
String email=sc.nextLine();
//String regex="[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+";
String regex="\\w+@\\w{2,6}(\\.\\w{2,3})+";
boolean flag=email.matches(regex);
System.out.println(flag);
}
public boolean pdphone(){
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的手机号码:");
String phone=sc.nextLine();
String regex="[1]\\d{10}";
boolean flag=phone.matches(regex);
return flag;
}
}

判断

package com.正则表达式._2;

import java.util.Arrays;
import java.util.Scanner; /*
* 分割功能
* public String[] split(String regex)
* 根据给定正则表达式拆分字符串
*
* 举例:
* 百合网,世纪佳缘,珍爱网,QQ
* 搜索好友
* 性别:女
* 范围:“18-24”
*
* age>=18 && age<=24
*
* 定义一个字符串,分割
*
* 将”91 27 46 38 50“输出最终为”27 38 46 50 91“
*/
public class RegexDemo02 {
public static void main(String[] args) {
String str1="91 27 46 38 50";
String[] strArray=str1.split(" ");
int[] arr=new int[strArray.length];
for(int i=0;i<strArray.length;i++){
arr[i]=Integer.parseInt(strArray[i]);
}
Arrays.sort(arr);
StringBuilder sb=new StringBuilder("");
for(int i=0;i<arr.length;i++){
sb.append(arr[i]+" "); }
System.out.println(sb);
}
public void test02(){
String s1="aa,bb,cc";
String[] str1Array=s1.split(",");
for(int i=0;i<str1Array.length;i++){
System.out.println(str1Array[i]);
}
System.out.println("------------------------");
s1="aa.bb.cc";
str1Array=s1.split("\\.");
for(int i=0;i<str1Array.length;i++){
System.out.println(str1Array[i]);
}
System.out.println("-------------------");
s1="aa bb cc";
//str1Array=s1.split("\\s+");
str1Array=s1.split(" +");
for(int i=0;i<str1Array.length;i++){
System.out.println(str1Array[i]);
}
System.out.println("-------------------");
s1="E:\\JavaSE\\day14\\avi";
str1Array=s1.split("\\\\");
for(int i=0;i<str1Array.length;i++){
System.out.println(str1Array[i]);
}
System.out.println("-------------------");
}
public void test01(){
//定义一个年龄搜索范围
String ages="18-24";
String regex="-";
String[] strArray=ages.split(regex);
/*for(int x=0;x<strArray.length;x++){
System.out.println(strArray[x]);
}*/
int startAge=Integer.parseInt(strArray[0]);
int endAge=Integer.parseInt(strArray[1]); Scanner input=new Scanner(System.in);
System.out.println("请输入你的年龄:");
int age=input.nextInt();
if(age>=startAge && age<=endAge){
System.out.println("你就是我想找的");
}else{
System.out.println("不符合我的要求");
}
}
}

分割

package com.正则表达式._2;
/*
* 正则表达式用于替换:
* public String replaceAll(String regex,String replacement) 使用给定的字符串替换本字符串中所有匹配给定正则表达式的子字符串
* public String replaceFirst(String regex,String replacement) 使用给定的字符串替换本字符串中第一个匹配给定正则表达式的子字符串
*/
public class RegexDemo03 {
public static void main(String[] args) {
String s="helloqq12345worldkh12313423java";
String regex="\\d+";
//String regex="\\d";
String ss="*";
// String result=s.replaceAll(regex, ss);
// System.out.println(result);
String result=s.replaceFirst(regex, ss);
System.out.println(result);
}
}

替换

package com.正则表达式._2;

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /*
* 前面使用String中的方法操作正则表达式进行字符串的判断、切割、替换
* 如果要使用查找功能的话,使用String类就无法达到了。
*
* Pattern
* 模式 正则表达式的编译表达形式
* 它主要是用来创建对应的匹配器对象然后使用匹配器对象的方法进行匹配
* 版本1.4开始
* 没有构造,
* compile(String regex) 获得匹配器对象
* pattern() 返回在其中编译过此模式的正则表达式
* String[] split(CharSequence input) 根据此模式的匹配拆分输入序列
* matches(CharSequence input) 创建此模式的匹配器
* static matchers(CharSequence input) 静态的,相当于compile方法和matcher方法的一步到位
* Matcher
* 匹配器 通过解析Pattern对character sequence执行匹配操作的引擎
* 使用它一般执行三种不同的匹配操作:
* matches 尝试将整个输入序列与该模式匹配
* lookingAt 尝试将该输入序列从头开始于该模式匹配,与matches不同的是它不需要匹配整个字符串
* find 尝试查找与该模式匹配的输入序列的下一个子序列 find与lookingAt的区别在于“下一个”
* 方法:
* int end()返回最后匹配字符之后的偏移量,就是它的下标
* boolean find()
* boolean find(int start) 重置匹配器,然后从索引处开始查找
* String group() 返回由以前匹配操作所匹配的输入子序列,就是返回匹配的输入字符串序列
* int group() 返回匹配的序列的数量
* boolean lookingAt() 尝试将区域开头开始的输入序列与该模式匹配
* quotReplacement(String s) 返回指定String的字面替换String,相当于String中的replaceAll
* Matcher region(int start,int end) 设置匹配器区域
* int regionStart() 返回匹配器匹配区域的开始索引
* int regionEnd() 返回匹配器匹配区域的结束索引
*/
public class PatternAndMatcher {
public static void main(String[] args){
testFind();
}
public void testPattern(){
String s="fghgf sashg sas sa";
String regex="\\s+";
Pattern p=Pattern.compile(regex);
String[] strArray=p.split(s);
System.out.println(Arrays.toString(strArray));
System.out.println(p.pattern());
}
public static void testFind(){
String s="hello , nice to meet you ! I'm guo zhen , let's me play with game !";
String regex="\\b\\w{3}\\b";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(s);
while(m.find()){
String s1=m.group();
System.out.println(s1);
} }
}

查找和构造器与模式

正则,String中用法,Pattern Matcher的更多相关文章

  1. java成神之——java中string的用法

    java中String的用法 String基本用法 String分割 String拼接 String截取 String换行符和format格式化 String反转字符串和去除空白字符 String获取 ...

  2. Java Pattern Matcher 正则应用

    转自:http://www.itzhai.com/java-notes-regex-matches-and-lookingat.html#read-more 1.基本语法 2.String内建的正则表 ...

  3. java:正则匹配Pattern,Matcher

    一.正则匹配Pattern,Mather String s = "aa424fsfsd92lfjw2755097"; Pattern p = Pattern.compile(&qu ...

  4. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

  5. Lua 中string.gsub(sourceString, pattern, replacementString) 返回值有两个

    这阵子在学习lua,今天看到string操作,书中描述string.gsub(sourceString, pattern, replacementString)返回一个字符串,但是我在实际操作中却发现 ...

  6. 正则验证:Pattern,Matcher

    public static void main(String[] args) { String regex="([a-z]{1})(\\d{2})"; String candida ...

  7. C#中string.Format 用法详解

    这篇文章主要介绍了C#中string.format用法,以实例形式较为详细的讲述了string.format格式化的各种用法,非常具有实用价值,需要的朋友可以参考下 本文实例总结了C#中string. ...

  8. C++ string中find() 用法

    string中 find()的用法 rfind (反向查找)  (1)size_t find (const string& str, size_t pos = 0) const;  //查找对 ...

  9. 关于java中String的用法

    在java 中String存在许多的基本函数,接下来了解一下这些函数的基本用法 String.equals用法(这个用法比较难) String类中的equals()方法: public boolean ...

随机推荐

  1. 【转发】Python使用openpyxl读写excel文件

    Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...

  2. 迁移学习与fine-tuning有什么区别

    假设你要处理一个新数据集,让你做图片分类,这个数据集是关于Flowers的,问题是,数据集中flower的类别很少,数据集中的数据也不多,你发现从零开始训练CNN的效果很差,很容易过拟合,怎么办呢,于 ...

  3. 需求:过滤下面这个网页里共723行 校对中里 行数为两位数的 行 并设置sz和rz在Windows和Linux之间发送和接收文件不用搭FTP

    需求:过滤下面这个网页里共723行 校对中里 行数为两位数的 行 并设置sz和rz在Windows和Linux之间发送和接收文件不用搭FTP 需求:过滤下面这个网页里共723行 校对中里 行数为两位数 ...

  4. tools-eclipse-001-如何安装插件

    插件的安装方法大体有以下三种: 第一种:直接复制法: 假设你的Eclipse的在(C:\eclipse), 解压你下载的 eclipse 插件或者安装eclipse 插件到指定目录AA(c:\AA)文 ...

  5. C++中定义NULL的头文件

    NULL不是C语言基本类型,其定义在stddef.h文件中,作为最基本的语言依赖宏存在.但是随着C/C++的发展,很多文件只要涉及了系统或者标准操作都会将NULL作为标准宏声明或者包含.所以几乎包含任 ...

  6. Thread的六中状态

    线程共有6种状态:在某一时刻只能是这6种状态之一.这些状态由Thread.State这个枚举类型表示,并且可以通过getState()方法获得当前线程具体的状态类型. NEW:至今尚未启动的线程的状态 ...

  7. 478. Generate Random Point in a Circle

    1. 问题 给定一个圆的半径和圆心坐标,生成圆内点的坐标. 2. 思路 简单说 (1)在圆内随机取点不好做,但是如果画出这个圆的外接正方形,在正方形里面采样就好做了. (2)取两个random确定正方 ...

  8. C#——文件操作类简单封装

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO ...

  9. pyDay14

    内容来自廖雪峰的官方网站. 1.map的优点:省代码 + 提高可读性. 2.map 运用示例: >>> def f(x): ... return x * x ... >> ...

  10. Vue学习笔记之vue-cli脚手架项目中组件的使用

    在webpack-simple模板中,包括webpck模板.一个.vue文件就是一个组件. 为什么会这样呢?因为webpack干活了!webpack的将我们所有的资源文件进行打包.同时webpack还 ...