Java中正则表达式运用实例

正则表达式是很重要,这点就不需要我说什么了。正在学习正则表达式,贴出源代码,以便以后查询:

package cn.kpchen.one;

import org.junit.Test;

public class RegularTest1 {
	public static void main(String[] args) {

	}

	/**
	 * qq
	 */
	@Test
	public void test1() {
		String qq = "1234567";
		String reg_qq = "[1-9][0-9]{4,14}";
		String reg_qq2 = "[1-9]\\d{4,14}";
		boolean bb = qq.matches(reg_qq);
		System.out.println(qq + "::" + bb);
	}

	@Test
	public void test2() {
		String str = "aooz";
		String reg = "ao*z";
		boolean b = str.matches(reg);
		System.out.println(str + "::" + b);
	}

	/**
	 * 手机号码
	 */
	@Test
	public void test4() {
		String str = "15395073029";
		String reg = "1[3458]\\d{9}";
		boolean b = str.matches(reg);
		System.out.println(str + "::" + b);
	}

	/**
	 * 手机号码 隐藏中间4位
	 */
	@Test
	public void test4_1() {
		String str = "15395073029";
		String reg = str.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
		String string = str.substring(0, 3) + "****"
				+ str.substring(7, str.length());
		System.out.println(string);
		System.out.println(reg);
	}

	/**
	 * 切割
	 */
	@Test
	public void test5() {
		String str = "15  39 50 73 0  29";
		String[] arr = str.split(" +");// 1个或者多个空格
		for (String string : arr) {
			System.out.println(string);
		}
	}

	/**
	 * 切割
	 */
	@Test
	public void test6() {
		String str = "zhangsan.lisi.wangwu";
		String[] arr = str.split("\\.");// .在正则表达式中代表任意字符
		for (String string : arr) {
			System.out.println(string);
		}
	}

	/**
	 * 切割
	 * 
	 * 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
	 * 
	 * 1 ((A)(B(C))) 2 \A 3 (B(C)) 4 (C)
	 */
	@Test
	public void test7() {
		String str = "dwdsqqdfszzzijf";// 以叠词进行切割
		// ()表示组, 其中\表示引用组 ,+表示前面一位有一个或者多个
		String[] arr = str.split("(.)\\1+");// 两位一致
		for (String string : arr) {
			System.out.println(string);
		}
	}

	/**
	 * 替换 将所有的叠词都替换成#
	 */
	@Test
	public void test8() {
		String str = "werqqtyuzzzio";
		str = str.replaceAll("(.)\\1+", "#");
		System.out.println(str);

	}

	/**
	 * 替换 将所有的叠词都替换成一个
	 */
	@Test
	public void test9() {
		String str = "werqqtyuzzzio";
		// 后一个参数可以通过$数字引用前一个参数中的组
		str = str.replaceAll("(.)\\1+", "$1");
		System.out.println(str);

	}
}


package cn.kpchen.two;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.junit.Test;

public class RegularTest2 {

	public static void main(String[] args) {

	}

	@Test
	public void test1() {
		Pattern p = Pattern.compile("a*b");
		Matcher m = p.matcher("aaaaab");
		boolean b = m.matches();
		System.out.println(b);
	}

	@Test
	public void test2() {
		String str = "da jia zhu yi le ,yao pai wei dian ying la ?";
		// \b表示单词的边界
		String reg = "\\b[a-z]{3}\\b";// 三个字母组成的单词都取出来
		// 正则规则被编译成Pattern对象
		Pattern pattern = Pattern.compile(reg);
		// 通过正则对象的方法matcher和字符串相关联获取匹配器对象

		Matcher matcher = pattern.matcher(str);
		while (matcher.find()) {
			System.out.println(matcher.start() + "---" + matcher.group()
					+ "---" + matcher.end());
		}

	}

	/**
	 * 找到所有数字并将其排序输出
	 * 
	 * @author: kpchen
	 * @createTime: 2014年11月8日 下午3:05:23
	 * @history: void
	 */
	@Test
	public void test3() {
		String s = "346qeije56fqw4r5qfy9qt5qoirad68763214";
		String reg = "\\d";
		Pattern pattern = Pattern.compile(reg);
		Matcher matcher = pattern.matcher(s);
		List<Integer> lists = new ArrayList<Integer>();
		while (matcher.find()) {
			lists.add(Integer.parseInt(matcher.group()));
			System.out.println(matcher.group());
		}

		Integer[] array = new Integer[lists.size()];
		for (int i = 0; i < array.length; i++) {
			array[i] = lists.get(i);
		}

		Arrays.sort(array);
		for (Integer integer : array) {
			System.out.print(integer);
		}

	}

}

1、test1()运行结果:

true

2、test2()运行结果:

3---jia---6
7---zhu---10
18---yao---21
22---pai---25
26---wei---29


3、test3()运行结果:

12334445556666789


package cn.kpchen.three;

import java.util.Arrays;

import org.junit.Test;

public class PegexTest {

	/**
	 * 练习:我我我...我我..我要....学..学...学学..编编程
	 */
	@Test
	public void test1() {
		/**
		 * 1.先去掉所有. 替换
		 * 2.叠词变成一个 替换
		 */
		String str = "我我我...我我..我要....学..学...学学..编编程";
		System.out.println(str);
		str = str.replaceAll("\\.+", "");
		System.out.println(str);

		str = str.replaceAll("(.)\\1+", "$1");
		System.out.println(str);

	}

	/*
	 * 对ip地址字符串中的ip进行排序,按照ip的分类顺序
	 */
	@Test
	public void test2() {
		String ip = "192.108.90.34  10.10.10.10   5.5.5.5  30.107.100.5 ";
		/*
		 * 为了排序方便,最好将ip中的每一段都是三位,(字典顺序)
		 * 给每一段进行补零操作
		 */
		//每位都补两个零
		ip = ip.replaceAll("(\\d+)", "00$1");
		System.out.println(ip);
		//每一段保留最后三位
		ip = ip.replaceAll("0*(\\d{3})", "$1");
		String[] ips = ip.split(" +");

		Arrays.sort(ips);
		for (String i : ips) {
			//去掉每段前面的零
			System.out.println(i.replaceAll("0*(\\d+)", "$1"));
		}

	}
}
1、test1()运行结果:

我我我...我我..我要....学..学...学学..编编程
我我我我我我要学学学学编编程
我要学编程


2.test2()运行结果:

00192.00108.0090.0034  0010.0010.0010.0010   005.005.005.005  0030.00107.00100.005
5.5.5.5
10.10.10.10
30.107.100.5
192.108.90.34


// 查找某个字符串中的特定字符
	@Test
	public void test1() {
		Pattern pattern = Pattern.compile("java");
		Matcher matcher = pattern.matcher("java Java JAVa I loveJavA ");
		while (matcher.find()) {
			System.out.println(matcher.group());
		}
	}

	@Test
	public void test2() {
		// 不区分大小写查找某个字符串中的特定字符
		Pattern pattern = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher("java Java JAVa I loveJavA ");
		while (matcher.find()) {
			System.out.println(matcher.group());
		}
		// 将所有匹配的java子串都替换成JAVA
		System.out.println(matcher.replaceAll("JAVA"));
	}

	@Test
	public void test3() {
		// 不区分大小写
		Pattern pattern = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher("java Java JAVa I loveJavA dsfsf");
		StringBuffer buf = new StringBuffer();
		int i = 0;
		while (matcher.find()) {
			i++;
			// 单数改变为大写,双数改变为小写
			if (i % 2 == 0) {
				matcher.appendReplacement(buf, "java");
			} else {
				matcher.appendReplacement(buf, "JAVA");
			}

		}
		// 将尾巴加入到buf中
		matcher.appendTail(buf);
		System.out.println(buf);
	}

	@Test
	public void test4() {
		// 分组
		Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");
		String s = "123aa-3434bb-234cc-00";
		Matcher m = p.matcher(s);
		while (m.find()) {
			System.out.println(m.group());
			// System.out.println(m.group(1));
			// System.out.println(m.group(2));
		}
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Java可以使用正则表达式来判断字符串是否包含文。下面是一个示例: ``` String regex = "[\u4e00-\u9fa5]"; String str = "这是一个文字符串"; // 判断字符串是否包含文 if (str.matches(".*" + regex + ".*")) { System.out.println("字符串包含文"); } else { System.out.println("字符串不包含文"); } ``` 在上面的例子,regex变量定义了一个范围为[\u4e00-\u9fa5]的正则表达式,表示匹配所有文字符。然后使用str.matches(".*" + regex + ".*")方法来判断字符串是否包含文。 ### 回答2: 在Java,可以使用正则表达式来判断文字符。具体的正则表达式可以为"\u4e00-\u9fa5",其"\u4e00"表示文字符的起始unicode编码,"\u9fa5"表示文字符的结束unicode编码。 使用正则表达式判断文的步骤如下: 1. 导入java.util.regex包; 2. 使用Pattern类的compile方法编译正则表达式,其参数为"\u4e00-\u9fa5"; 3. 创建Matcher类的实例,将待判断的字符串作为参数传入; 4. 使用find方法进行匹配查找; 5. 若find方法返回true,则表示字符串包含文字符;否则,不包含文字符。 示例代码如下: ``` import java.util.regex.Matcher; import java.util.regex.Pattern; public class ChineseCharacterChecker { public static boolean containsChineseCharacter(String str) { String regex = "\u4e00-\u9fa5"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); return matcher.find(); } public static void main(String[] args) { String str1 = "Hello World"; String str2 = "你好,世界"; System.out.println(containsChineseCharacter(str1)); // false System.out.println(containsChineseCharacter(str2)); // true } } ``` 以上代码的containsChineseCharacter方法会返回一个布尔值,指示字符串是否包含文字符。在示例,str1不存在文字符,所以返回false;而str2存在文字符,所以返回true。 ### 回答3: 在Java,可以使用正则表达式判断文。可以使用Unicode编码来表示文字符的范围,即[\u4E00-\u9FFF]。这个范围包括了常见的汉字和一些少用的汉字。 下面是一个示例代码,展示了如何使用正则表达式判断一个字符串是否包含文字符: ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { String str = "Hello, 世界!"; Pattern pattern = Pattern.compile("[\u4E00-\u9FFF]"); // 匹配文字符的正则表达式 Matcher matcher = pattern.matcher(str); if (matcher.find()) { System.out.println("字符串包含文字符"); } else { System.out.println("字符串不包含文字符"); } } } ``` 运行上述代码,输出结果为"字符串包含文字符",因为字符串"Hello, 世界!"包含了文字符"世界"。 通过使用正则表达式,我们可以方便地判断一个字符串是否包含文字符。在上述示例代码,使用了Unicode编码来表示文字符的范围,这可以确保我们不会将其他字符误判为文字符。如果有需要,我们还可以根据具体需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间辜负了谁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值