正则,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 ...
随机推荐
- centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课
centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课 ...
- php计算中英文混合或中文字符串的字数
转载来源链接: http://blog.csdn.net/hueise_h/article/details/22920937 php的strlen和mb_strlen用于统计字符个数.中英文混合的字符 ...
- PAT 1105 Spiral Matrix[模拟][螺旋矩阵][难]
1105 Spiral Matrix(25 分) This time your job is to fill a sequence of N positive integers into a spir ...
- ng-深度学习-课程笔记-3: Python和向量化(Week2)
1 向量化( Vectorization ) 在逻辑回归中,以计算z为例,$ z = w^{T}+b $,你可以用for循环来实现. 但是在python中z可以调用numpy的方法,直接一句$z = ...
- 883. Projection Area of 3D Shapes
问题 NxN个格子中,用1x1x1的立方体堆叠,grid[i][j]表示坐标格上堆叠的立方体个数,求三视图面积. Input: [[1,2],[3,4]] Output: 17 Explanation ...
- 初识PHP(一)基础语法
一直准备学习PHP,结果前一段时间总是有事情,耽误了一阵子.现在赶快迎头赶上! 这个系列只是谈谈我对于PHP的一些看法,不是教程性质的.另外我是小白,只是写写随笔,大神求轻拍.本人学习过c .java ...
- Dekker算法在多核处理器下的失效
Dekker algorithm是一种著名的并发编程的算法,Dekker算法的核心部分是一组对称的代码来访问一组共享变量,使得两个线程不可能同时进入临界区(只要cpu内存模型是遵循顺序一致性的),从而 ...
- Python学习札记(二十六) 函数式编程7 修饰器
修饰器 NOTE 1.函数对象有一个__name__属性,可以拿到函数的名字: #!/usr/bin/env python3 def now(): print('2017/2/19') def mai ...
- Educational Codeforces Round 17 C. Two strings 打表二分
C. Two strings time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- 快递100API接口开发
api.kuaidi100.com 获得物流单号的跟踪信息(免费) 1.应用场景 2.是否需要授权 3.请求地址 4.输入参数 5.返回结果 6.返回示例 7.API工具 8.FAQ 通过向指定的地址 ...