1>题目描述
- 题目描述:
- 密码要求:
- 1.长度超过8位
- 2.包括大小写字母.数字.其它符号,以上四种至少三种
- 3.不能有相同长度大于2的子串重复
- 输入描述:
- 输出描述:
2>解法
- 简单的说密码需要经过3重验证
- 1>长度超过8,这个实现很简单,利用字符串length()方法即可
- 2>包括大小写字母.数字.其它符号,以上四种至少三种,这里利用正则表达式来筛选
- 3>不能有相同长度大于2的子串重复,双指针法,左右各自一个指针,截取左右指针之间的字符串, 让右指针及其后面部分的字符串判断是否包含,若包含则不满足条件,一次结束后,左右指针各加一位,循环结束条件为右指针到达字符串尾。
2.1、关于如何匹配字符串
- java.util.regex有两个类(Pattern、Matcher)
- 如何创建Pattern对象?
- Pattern pattern = Pattern.compile(" ");
- 这里compile内部输入正则表达式
- 如何创建Matcher对象?
- Matcher matcher = pattern.matcher(" ")
- 这里matcher内部输入需要通过正则表达式检测的字符串
- Matcher的两个方法
- find():要求检测的字符串部分满足正则表达式无需完全满足
- 例如:“ABCDEF123” 满足"[0-9]"返回true
- matches():要求检测的字符串完全满足正则表达式
- 例如:“ABCDEF123"不满足”[0-9]"返回false
2.2、代码实现
import java.util.*;
import java.util.regex.Pattern;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext(