栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JavaSE基础笔记 正则表达式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaSE基础笔记 正则表达式

Java正则表达式常见应用:

1.字符串匹配

2.字符串分析

3.文本替换

4.Scanner定界符

例题1:使用正则表达式匹配输入的字符串(例5.13)

arg相应输入的内容如下

abcabcabcdefabc "abc+" "(abc)+" "(abc){2,}

 运行结果:

源代码备忘录:

TestRegex.java

package regex;
import java.util.regex.*;
public class TestRegex {
	public static void main(String[] args) {
		if (args.length < 2) {
			System.out.println("Usage:njava TestRegex "
					+ "characterSequence regularExpression+");
			System.exit(0);
		}
		System.out.println("Input: "" + args[0] + """);
		for (String arg : args) {
			System.out.println("Regular expression: "" + arg + """);
			Pattern p = Pattern.compile(arg);
			Matcher m = p.matcher(args[0]);
			while (m.find()) {
				System.out.println("Match "" + m.group() + "" at positions "
						+ m.start() + "-" + (m.end() - 1));
			}
		}
	}
}

例题2:字符串分析(例5.14)

用正则表达式对一个由数字和非数字组成的字符串进行分析。要求:将其中每段连续的数字字符转换成一个整数,若连续的数字字符个数超过4个,则以4个数字为一组进行转换,转换生成的整数依次存入整型数组中。例如,对“c789yz45!786*+56abc123456789”分析后得到的数组内容为:789、45、786、56、1234、5678、9。

程序运行结果:

源代码部分:

GetNumber.java
package regex;
import java.util.regex.*;
public class GetNumber {
	public static void main(String[] args) {
		int[] arr = new int[10];					// 创建1个整型数组
		Pattern p = Pattern.compile("(\d{1,4})");	// 编译正则表达式,要求1个到4个数字
		String s = "c789yz45!786*+56abc123456789";
		Matcher m = p.matcher(s);				// 对字符串进行匹配
		int i =0;
		while(m.find()) {					// 寻找与指定模式匹配的下一个子序列
			int j = 0;
			j = Integer.parseInt(m.group());		// 将字符串类型转换为整型
			arr[i]= j;
			i++;
		}
		for(int c = 0;c 

例题3:文本替换(例题5.15)

将字符串奇数序列的“java”替换为小写,偶数序列的“java”替换成大写。

 运行结果:

源代码部分:

TestReplace.java
package regex;
import java.util.regex.*;
public class TestReplace {
	public static void main(String[] args) {
		Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);	// 不区分大小写
		Matcher m = p.matcher("Java java JAva JAVA I love JAVA you dislike Java ");
		StringBuffer buf = new StringBuffer();
		int i=0;
		while(m.find()) {
			i++;
			if(i%2 == 0) {			
				m.appendReplacement(buf, "JAVA");		// 偶数序列的转换成大写
			} else {
				m.appendReplacement(buf, "java");		// 奇数序列的转换成小写
			}
		}
		m.appendTail(buf);
		System.out.println(buf);
	}
}

例题4:Scanner定界符

使用“.”作为IP地址的定界符(例5.16)

程序结果:

源代码部分:

TestScanner.java

package regex;
import java.util.*;
public class TestScanner {
	public static void main(String[] args){
		Scanner scanner = new Scanner("192.168.1.99");
		scanner.useDelimiter("\s*\.\s*");					// 使用"."作为定界符
		while(scanner.hasNextInt())
			System.out.println(scanner.nextInt());
	}
}

 正则表达式相关实验例题:

【实验5.1】统计一个字符串中单词的个数(参考教材p371-372),并思考一下如果单词间包含unicode定义的空白字符,是否能够统计出来?

运行结果:

 这里可以借助java自带的一个类进行分割单词的统计工作 并不需要用到正则表达式

源代码部分:

import java.util.*;
	public class TestString {
		public static void main(String[] args) {
			String data = "This is a String";
			StringTokenizer st = new StringTokenizer(data);		
			int count = st.countTokens(); 				// 计算单词总数
			System.out.println("原串是:" + data);
			System.out.println("各个单词如下:");
			while (st.hasMoreTokens()) {				// 还有子串时
				String s = st.nextToken(); 				// 取出下一个子串
				System.out.println(s);
			}
			System.out.println("单词总数:" + count);
		}
	}

【实验5.2】参考教材p372中EmailSpider.java, 采用正则表达式形式实现一个URL地址提取功能。

提取url地址所采用的正则表达式:

(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]

这里我们采取读取文件的方式 我们不妨在d盘下放一个test.txt文本

接下来我们看一下运行的结果:

源代码部分:

import java.io.BufferedReader;
import java.io.*;
import java.util.regex.*;

public class EmailSpider {
    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new FileReader("d:\test.txt"));
            String line = "";
            while((line=br.readLine()) != null) {
                parse(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private static void parse(String line) {
        Pattern p = Pattern.compile("(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]");  // 编译正则表达式
        Matcher m = p.matcher(line);
        while(m.find()) {
            System.out.println(m.group());
        }
    }
}

【实验5.3】编写程序读取一个Java源代码文件,打印出代码中所有普通字符串。

我们这里同样可以通过以上的方法直接读取java的文件

之后通过正则表达式去匹配所有的普通字符串即可(字母数字下划线组成的叫普通字符串 没有其他标点符号等)

 

之后我们在d盘下放一个用于测试的java文件

运行结果:

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/889202.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号