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. [py]python中的==和is的区别

    is比较id id(a) == id(b) == id(c) a is d #false ==比较值 a==b #true 举个例子:a = 1 b = a c = 1 d = 1.0 这里有3个对象 ...

  2. Java实现最基本的集中排序

    排序是一个很重要的概念,现实生活中,我们需要为很多的东西排序.下面我们就介绍几种简单的排序的方法和最基本的思想. 1.冒泡排序:假设一个数组中有10个数字,从左边开始

  3. D题:数学题(贪心+二分)

    原题大意:原题链接  题解链接 给定两个集合元素,求出两集合间任意两元素相除后得到的新集合中的第k大值 #include<cstdio> #include<algorithm> ...

  4. CCPC 2017-2018, Finals Solution

    A - Dogs and Cages 水. #include <bits/stdc++.h> using namespace std; int t; double n; int main( ...

  5. scp命令简单应用

    实例1:从远处复制文件到本地目录 $scp root@10.6.159.147:/opt/soft/demo.tar /opt/soft/ 说明: 从10.6.159.147机器上的/opt/soft ...

  6. DB开发之oracle

    常用命令: select table_name from user_tables;  //当前用户的表 select table_name from all_tables;  //所有用户的表 sel ...

  7. bzoj1617 / P2904 [USACO08MAR]跨河River Crossing

    P2904 [USACO08MAR]跨河River Crossing 显然的dp 设$f[i]$表示运走$i$头奶牛,木筏停在未过河奶牛一侧所用的最小代价 $s[i]$表示一次运$i$头奶牛到对面的代 ...

  8. 对OpenCV中seamlessClone的初步实验

    seamlessClone是OpenCV中新出现的函数,应该说如果能够基于较为准确的图像分割,能够得到很好的结果. 原始的前景,背景 三种flag下的融合结果   //注意头文件中添加  #inclu ...

  9. # 20145106 《Java程序设计》第3周学习总结

    教材学习内容总结 在本周的学习中,我看到了这样一句话:"使用java撰写程序几乎都是在使用对象(object),要产生对象必须先定义类(class),类是对象的设计图,对象是类的实例(ins ...

  10. 设置WebApi里面命名空间参数

    在这种情况下: 如果没有特别处理,会报: 所以要像MVC中的控制器一下配置一个命名空间参数,webapi里面没有自带这个功能 代码: using System; using System.Collec ...