正则,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][email protected][a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+";
        String regex="\\[email protected]\\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);
        }

    }
}

查找和构造器与模式

时间: 2024-11-25 10:41:18

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

java中使用Pattern类中和Matcher类进行查找和替换,你会吗?

前言 无论是哪一门语言,我们总会用到正则表达式来进行字符串的查找和替换.Java中也不为过,我曾经写过一个网页---正则表达式在线测试.那时候,我还没有开始学习Java,不知道Java支持正则表达式,所以我的第一个方案是想办法将数据传输到后台,然后利用Shell脚本正则表达式得到匹配结果.如果后来真的那么做了,那就二了.后来我研究了以下别的类似的网站,发现甚至连js文件都不用写,直接将函数写在html文件中就能够完成这一个任务.一天的时间,我把这个网站给写了出来.所以,即使不是脚本型语言,了解以

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

java中String的用法 String基本用法 String分割 String拼接 String截取 String换行符和format格式化 String反转字符串和去除空白字符 String获取指定位置字符和replace的使用 StringBuffer的使用 字符串转换 基本类型的转换 添加字符编码 Base64的编码和解码 结语 java中String的用法 String基本用法 字符串一旦创建在堆中就不可变 字符串声明 String str = "你好"; String s

Java Pattern Matcher 正则应用

转自:http://www.itzhai.com/java-notes-regex-matches-and-lookingat.html#read-more 1.基本语法 2.String内建的正则表达式功能 2.1.String类自带的正则表达式工具 2.1.1.split方法 2.1.2.字符串替换之replaceFirst和replaceAll方法 3.创建正则表达式: 3.1.Pattern和Matcher 3.1.2.matches()与lookingAt()的使用 3.2.Group

C#中string.format用法详解 [转载]

这篇文章主要介绍了C#中string.format用法,以实例形式较为详细的讲述了string.format格式化的各种用法,非常具有实用价值,需要的朋友可以参考下 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项.String.Format (String, Obj

C#中string.Format 用法详解

这篇文章主要介绍了C#中string.format用法,以实例形式较为详细的讲述了string.format格式化的各种用法,非常具有实用价值,需要的朋友可以参考下 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项.String.Format (String, Obj

正则Pattern Matcher compile matcher find group(.*?)

public static void main(String[] args) { String str = "http://funds.hexun.com/2015-05-28/176237903.html"; Pattern pattern = Pattern.compile("http:\\/\\/(.*?)\\.hexun\\.com(.*?)\\.html"); Matcher matcher = pattern.matcher(str); while (m

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

这阵子在学习lua,今天看到string操作,书中描述string.gsub(sourceString, pattern, replacementString)返回一个字符串,但是我在实际操作中却发现,这个函数其实返回的是两部分内容,一部分是替换后的字符串,一部分是替换长度. myString = "my name is lucy, my phone numbre is 010-88993366." print(string.gsub(myString, "%d",

string中c_str()、data()、copy(p,n)函数的用法(转)

标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str().data().copy(p,n). 1. c_str():生成一个const char*指针,指向以空字符终止的数组. 注: ①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效.因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中.注意.看下例: const char* c; string s="1234"; c = s.c_str(); co

string中find()和substr()的用法

string中find()和substr()的用法 查找从指定位置开始的 string s="123453"; cout<<s.find('3')<<endl; cout<<s.find('3',2); 输出: 2 2 当找不到的时候,函数会返回一个s.npos 找第一个目标字符串的位置和最后一个的位置(不是全匹配): string s="123453"; cout<<s.find_first_of("34&