hdu1039 java正则表达式解法

本文介绍了一个使用Java正则表达式解决字符串验证问题的例子。该问题要求检查字符串是否至少包含一个元音,没有三个连续的相同类型字母,并且除了'ee'和'oo'外没有重复的相邻字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Easier Done Than Said?

题意就是测试一段字符串是否满足下面三个条件:

(1)至少含有一个元音(a、e、i、o、u)

(2)不能连续三个是元音,也不能连续三个是非元音

(3)不能有连续两个字母是相同的,但是ee和oo除外

默认情况下,给出的字符串只含有小写字母。

当然这道题目用c++,解起来也不是很困难的,这次用java主要是练习正则表达式。

java代码是:

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

public class Main {
	public static void main(String[] args) throws Exception {
		Scanner cin = new Scanner(System.in);
		while (cin.hasNext()) {
			String str = cin.next();
			if(str.equals("end"))
				break;
			Pattern p1 = Pattern.compile("[aeiou]{3}|[^aeiou]{3}");
			Pattern p2 = Pattern.compile("([^eo])\\1");
			Pattern p3 = Pattern.compile("[aeiou]+");
			Matcher m = p1.matcher(str);
			boolean flag = false;
			if(!m.find())
			{
				m = p2.matcher(str);
				if(!m.find())
				{
					m = p3.matcher(str);
					if(m.find())
						flag = true;
				}
			}
			if(flag)
				System.out.println("<"+str+"> is acceptable.");
			else
				System.out.println("<"+str+"> is not acceptable.");
		}
		cin.close();
	}
}

关于正则式:

[aeiou]{3}|[^aeiou]{3}  三个连续元音,或者三个连续非元音

 ([^eo])\\1在字符串中 \  要进行转义所以要写  \\  来代表 \  意思是两个连续元音除(ee,oo)。这个写法([a-df-np-z])\\1  比较丑,呵呵.

                            ()表示分组,和\1连用。\1表示对前面第一个匹配到的组的一个引用,也就是 相同的效果。比如(a)\1和(a)(a)同样意思。

[aeiou]+ 匹配至少有一个元音。+是一个或多个,*是0个或多个,?是0个或1个


 

转载于:https://www.cnblogs.com/unclejelly/p/4082103.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值