(26)Java学习笔记——常用对象 / 正则表达式

正则表达式:

指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。

(符合一定规则的字符串)

范例:

package cn.itcast_01;

import java.util.Scanner;

/*
 * 正则表达式
 * 范例:
 * 输入一个QQ号码(5~15位)
 * 开头字符不能为0
 */
public class RegexDemo {
	public static void main(String[] args) {
		//创建键盘输入
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你的QQ号码:");
		String qq = sc.nextLine();
	}
	
	//定义一个判断规则方法
	public static boolean checkQQ(String qq){
		String regex ="[1-9] [0-9]{4,14}";
		//public boolean maches(String regex) 告知此字符串是否匹配给定的正则表达式
		boolean flag =qq.matches(regex);
		return flag;
	}
}


________________________________________________________________

正则表达式的组成规则

规则字符在java.util.regex Pattern类中

常见组成规则:

字符:

x 字符 x 。举例:‘a' 表示字符a

\\ 反斜线字符

\n 新行(换行)符

\r 回车符


字符类:

把很多放在一起的容器

[abc]abc(简单类)

[^abc]任何字符,除了 abc(否定)

[a-zA-Z]azAZ,两头的字母包括在内(范围)


预定义字符类

.任何字符(与行结束符可能匹配也可能不匹配)
\d数字:[0-9]
\D非数字: [^0-9]
\w单词字符:[a-zA-Z_0-9]  在正则表达式里面组成单词的必须是这些
\W非单词字符:[^\w]


边界匹配器

^行的开头
$行的结尾
\b单词边界   就是不是单词字符的地方 举例:hello world?haha;xixi(只要不是单词字符的就是单词边界)

数量词

X?X,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好 n
X{n,}X,至少 n
X{n,m}X,至少 n 次,但是不超过 m


________________________________________________________________

正则表达式的应用

判断功能:

public boolean matches(String regex)

使用的是String类的matches方法

范例:

package cn.itcast_02;

import java.util.Scanner;

/*
 * 判断功能
 * 使用的是String类的matchs方法
 * 需求:
 * 判断手机号码是否满足要求
 * 
 * 思路:
 * A/ 键盘录入手机号码
 * B/ 定义手机号码的规则
 * 13436975980
 * 13688886868
 * 13866668888
 * 18912356849
 * 18866559797
 * 18356462132
 * 
 * C/ 调用功能判断即可
 */
public class RegexDemo {
	public static void main(String[] args) {
		//键盘录入手机号码
		Scanner sc =new Scanner(System.in);
		System.out.println("输入手机号码");
		String phone = sc.nextLine();
		
		//定义手机规则
		String regex = "1[38]\\d{9}";	
		
		//调用功能
		boolean flag =phone.matches(regex);
		
		//输出结果
		System.out.println("flag:"+flag);
	}
}

练习01:校验邮箱

package cn.itcast_03;

import java.util.Scanner;

/*
 * 练习:校验邮箱
 * 
 * 思路:
 * A/ 键盘输入邮箱
 * B/ 定义邮箱规则
 * C/ 调用功能判断即可
 */
public class RegexTest_01 {
	public static void main(String[] args) {
		//键盘输入
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你的邮箱:");
		String mail = sc.nextLine();
		
		//定义邮箱规则
		String mailRegex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]+(\\.[a-zA-Z_0-9]{2,3})+";
		
		//调用功能
		boolean flag = mail.matches(mailRegex);
		
		//输出结果
		System.out.println("flag:"+flag);
		
	}
}


分割功能

public String[ ] split(String regex)

范例

package cn.itcast_04;

import java.util.Scanner;

/*
 * 分割功能
 * String类的split方法
 * 举例:
 * 百合网,世纪佳缘,珍爱网,QQ
 * 搜索好友
 * 		性别:女
 * 		年龄:"18-24"
 * 
 */
public class RegexDemo {
	public static void main(String[] args) {
		// 定义一个年龄搜索范围
		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类型的值
		int startAge = Integer.parseInt(strArray[0]);
		int endAge = Integer.parseInt(strArray[strArray.length-1]);
/*		System.out.println(startAge);
		System.out.println(endAge);*/
		
		//键盘录入年龄
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入年龄");
		int age = sc.nextInt();
		
		//判断
		if(age>=startAge && age<=endAge){
			System.out.println("你就是我想找的");
		}
		else{
			System.out.println("滚");
		}
		
				
	}
}
练习01:

package cn.itcast_04;
/*
 * 分割功能练习
 * 定义一个字符串"aa,bb,cc"
 * 分割成aa   bb    cc
 */
public class RegexTest_01 {
	public static void main(String[] args) {
		//定义一个字符串
		String s1="aa,bb,cc";
		
		//直接分割
		String[] str1Array = s1.split(",");
		for(int x=0;x<str1Array.length;x++){
			System.out.println(str1Array[x]);
		}
		
		System.out.println("-----------------------");
		
		String s2 = "aa.bb.cc";
		String[] str2Array = s2.split("\\.");
		for(int x=0;x<str2Array.length;x++){
			System.out.println(str2Array[x]);
		}
		
		System.out.println("-----------------------");
		
		String s3 = "aa    bb                   cc";
		String[] str3Array = s3.split(" +");	//+是一次或一次以上
		for(int x=0;x<str3Array.length;x++){
			System.out.println(str3Array[x]);
		}
		
		System.out.println("-----------------------");
		
		//硬盘上的路径,应该用\\替代\
		String s4 = "G:\\VX\\sorfware";
		String[] str4Array = s4.split("\\\\");	// 规则中\\代表别人\个
		for(int x=0;x<str4Array.length;x++){
			System.out.println(str4Array[x]);
		}
		
	}
}
练习02:
package cn.itcast_04;

/*
 * 分割功能练习:
 * 一个字符串"91 27 46 38 50"
 * 需求:输出结果"27 38 46 50 91"
 * 思路:
 * A/将字符串分割成字符数组
 * B/用冒泡方法重新排序
 * C/将字符串数组从新拼接成字符串
 * D/输出
 * 
 */
public class RegexTest_02 {

	public static void main(String[] args) {
		//定义字符串
		String s = "91 27 46 38 50";
		
		//将字符串分割成字符数组
		String[] strArray = s.split(" ");
/*		//遍历打印数组看看分割是否正确
		for(int x=0;x<strArray.length;x++){
			System.out.println(strArray[x]);
		}*/
		
		//通过冒泡排序,将字符数组重新排序
		for(int x=0;x<strArray.length-1;x++){
			for(int y=0;y<strArray.length-1-x;y++){
				if(Integer.parseInt(strArray[y]) > Integer.parseInt(strArray[y+1])){	//将字符串元素转换成Int类型进行比较
					String temp = strArray[y];
					strArray[y]=strArray[y+1];
					strArray[y+1]=temp;
				}
			}
		}
		
/*		System.out.println("---------------------");
		//遍历打印字符数组看看排序是否正确
		for(int x=0;x<strArray.length;x++){
			System.out.println(strArray[x]);
		}
		*/
		//将字符数组重新拼接成字符串
		StringBuffer sb = new StringBuffer();
		for(int x=0;x<strArray.length;x++){
			sb.append(strArray[x]).append(" ");
		}
		
		String s1 = sb.toString();
		System.out.println("输出结果是:"+s1);

	}

}


替换功能

public String replaceAll(String regex. String replacement)

使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 

范例:

package cn.itcast_05;
/*
 * 替换功能
 * String类的replaceAll方法
 */
public class RegexDemo {
	public static void main(String[] args) {
		//定义一个字符串
		String s = "helloqq12345worldkh622112345678java";
		
		//需求:去除所有的数字,用*替换掉
		//定义规则
//		String regex = "\\d+";	//出现数字就给一颗*
		String regex = "\\d";	//出现一个数字就给一颗*
		String ss = "*";
		
		String result = s.replaceAll(regex, ss);
		System.out.println("result:"+result);
	}
}


获取功能

Pattern 和 Matcher类的使用


Pattern 正则表达式的编译表示形式。

模式和匹配器的典型的调用顺序是:

 Pattern p = Pattern.compile("a*b");	//将正则表达式便宜成模式对象
 Matcher m = p.matcher("aaaaab");	//通过模式对象得到匹配器对象,这个时候需要的是匹配的字符串
 boolean b = m.matches();	//调用匹配器对象的功能
范例:

package cn.itcast_06;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
 * 获取功能:获取下面字符串中由三个字符组成的单词
 * da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?
 */
public class RegexDemo2 {
	public static void main(String[] args) {
		//定义字符串:
		String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";
		
		//把规则编译成模式对象
		Pattern p = Pattern.compile("\\b[a-z]{3}\\b");
		//通过模式对象得到匹配器对象
		Matcher m = p.matcher(s);
	/*	//调用匹配器对象的功能
		//通过find方法查找有没有满足条件的子串
		//public boolean find()
		boolean flay = m.find();
		//如何得到值呢?
		//public String group();
		String ss = m.group();
		System.out.println(ss);
		
		//再来一次
		//flag = m.find();
		ss=m.group();
		System.out.println(ss);
		*/
		
		while(m.find()){
			System.out.println(m.group()); 		//调用group之前一定要find先找,找到才能group
		}
		
	}
}













  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python学习笔记|字符串与正则表达式练习题答案 1. 练习题1: 题目:给定一个字符串s,找出其中的连续的最长的数字串。 答案:可以通过正则表达式来匹配数字串,然后使用max函数找出最长的。 代码示例: import re def find_longest_num_str(s): num_str_list = re.findall('\d+', s) longest_str = max(num_str_list, key=len) return longest_str s = "ab1234c56789def" print(find_longest_num_str(s)) 输出:56789 2. 练习题2: 题目:给定一个字符串s,将其中的每个空格替换为"%20"。 答案:可以通过正则表达式的sub函数来实现替换。 代码示例: import re def replace_space(s): new_s = re.sub(' ', '%20', s) return new_s s = "Hello World" print(replace_space(s)) 输出:Hello%20World 3. 练习题3: 题目:给定一个字符串s,判断它是否为回文字符串。 答案:可以使用切片操作将字符串反转,然后与原字符串进行比较。 代码示例: def is_palindrome(s): return s == s[::-1] s = "abcba" print(is_palindrome(s)) 输出:True ### 回答2: 以下是关于字符串和正则表达式练习题的答案: 1. 给定一个字符串s,编写一个函数,返回该字符串的反转字符串。 def reverse_string(s): return s[::-1] 2. 给定一个字符串s,编写一个函数,返回是否是回文字符串。 def is_palindrome(s): return s == s[::-1] 3. 给定一个字符串s和一个字符c,编写一个函数,返回字符串s中字符c的出现次数。 def count_char(s, c): return s.count(c) 4. 给定一个字符串s,编写一个函数,返回字符串s中的所有单词列表。 def split_words(s): return s.split() 5. 给定一个字符串s,编写一个函数,返回字符串s中的所有数字列表。 import re def extract_numbers(s): return re.findall(r'\d+', s) 这只是一些可能的答案,其中的解决方法可以有很多种。每个问题都有不同的解决方案,具体取决于个人的编程风格和需求。希望这些答案能够帮助你理解和学习Python中的字符串和正则表达式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值