正则,String中用法,Pattern Matcher
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的更多相关文章
- java成神之——java中string的用法
java中String的用法 String基本用法 String分割 String拼接 String截取 String换行符和format格式化 String反转字符串和去除空白字符 String获取 ...
- Java Pattern Matcher 正则应用
转自:http://www.itzhai.com/java-notes-regex-matches-and-lookingat.html#read-more 1.基本语法 2.String内建的正则表 ...
- java:正则匹配Pattern,Matcher
一.正则匹配Pattern,Mather String s = "aa424fsfsd92lfjw2755097"; Pattern p = Pattern.compile(&qu ...
- C#中string.format用法详解
C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...
- Lua 中string.gsub(sourceString, pattern, replacementString) 返回值有两个
这阵子在学习lua,今天看到string操作,书中描述string.gsub(sourceString, pattern, replacementString)返回一个字符串,但是我在实际操作中却发现 ...
- 正则验证:Pattern,Matcher
public static void main(String[] args) { String regex="([a-z]{1})(\\d{2})"; String candida ...
- C#中string.Format 用法详解
这篇文章主要介绍了C#中string.format用法,以实例形式较为详细的讲述了string.format格式化的各种用法,非常具有实用价值,需要的朋友可以参考下 本文实例总结了C#中string. ...
- C++ string中find() 用法
string中 find()的用法 rfind (反向查找) (1)size_t find (const string& str, size_t pos = 0) const; //查找对 ...
- 关于java中String的用法
在java 中String存在许多的基本函数,接下来了解一下这些函数的基本用法 String.equals用法(这个用法比较难) String类中的equals()方法: public boolean ...
随机推荐
- 【Linux学习 】Linux使用Script命令来记录并回放终端会话
一背景 二script命令简介 1 什么script命令 2 script命令操作 21 file选项 22 options选项 23 退出script 三Script命令结合实际使用场景 1 先在终 ...
- day11(jsp入门&Cookie&HttpSession&一次性图片校验码)
day11 JSP入门 1 JSP概述 1.1 什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. ...
- nodejs中Async详解之一:流程控制
为了适应异步编程,减少回调的嵌套,我尝试了很多库.最终觉得还是async最靠谱. 地址:https://github.com/caolan/async Async的内容分为三部分: 流程控制:简化十种 ...
- 使用distcp并行拷贝大数据文件
以前我们介绍的访问HDFS的方法都是单线程的,Hadoop中有一个工具可以让我们并行的拷贝大量数据文件,这个工具就是distcp. distcp的典型应用就是在两个HDFS集群中拷贝文件,如果两个集群 ...
- 表单验证—html5新特性表单验证
一.表单 <body> <section id="register"> <div><img src="images/logo.j ...
- python连接mysql,redis类方法
#coding:utf8 import pymysql import redis import conf '''MYSQL DB Object''' class Mysql(): def __init ...
- 用python解析word文件(段落篇(paragraph) 表格篇(table) 样式篇(style))
首先需要安装相应的支持库: 直接在命令行执行pip install python-docx 示例代码如下: import docxfrom docx import Document #导入库 path ...
- 如何运行.ipynb文件
首先cmd下面输入: pip install jupyter notebook ,安装慢的改下pip的源为国内的源 然后cmd中输入: jupyter notebook就会弹出一个页面 先upload ...
- HDU 3605 Escape(状态压缩+最大流)
http://acm.hdu.edu.cn/showproblem.php?pid=3605 题意: 有n个人和m个星球,每个人可以去某些星球和不可以去某些星球,并且每个星球有最大居住人数,判断是否所 ...
- 子网掩码与ip有实际关系吗?
子网掩码是作为ip地址的标识,还是本身就是ip地址的一部分?例如10.10.10.1/24和10.10.10.1/25是同一个ip地址吗? 作者:知乎用户链接:https://www.zhihu.co ...