您的位置:首页 > 编程语言 > Java开发

Java - 华为机试训练 - 密码验证合格程序(正则表达式判断)

2016-09-04 20:33 627 查看
时间限制:1秒空间限制:32768K

本题知识点: 字符串 数组

 算法知识视频讲解


题目描述

密码要求:

 

 

 

1.长度超过8位

 

 

 

2.包括大小写字母.数字.其它符号,以上四种至少三种

 

 

 

3.不能有相同长度超2的子串重复

 

 

 

说明:长度超过2的子串

输入描述:
一组或多组长度超过2的子符串。每组占一行

输出描述:
如果符合要求输出:OK,否则输出NG

输入例子:
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000


输出例子:
OK
NG
NG
OK


思路:

合法字符串 :

1.长度>8。 

2.大写字母,小写字母,符号,数字,具有其中3种或者以上。

3.不能有长度为3或者3以上的子串相同。

输入字符串进行判断,是合法字符串输出OK,否则输出NG。

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

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

while (sc.hasNext()) {
String s = sc.next();
if (f(s)) {
System.out.println("OK");
} else {
System.out.println("NG");
}
}
}

// 数字,大小写字母,符号
static boolean f(String s) {
int flag = 0;
Pattern p1 = Pattern.compile(".*[a-z]+.*");//小写字母
Pattern p2 = Pattern.compile(".*[0-9]+.*");//数字
Pattern p3 = Pattern.compile(".*[^0-9a-zA-Z]+.*");//符号(除了字母和数字)
Pattern p4 = Pattern.compile(".*[A-Z]+.*");//大写字母

Matcher m1 = p1.matcher(s);
Matcher m2 = p2.matcher(s);
Matcher m3 = p3.matcher(s);
Matcher m4 = p4.matcher(s);

if (m1.matches()) {
flag++;

}
if (m2.matches()) {
flag++;

}
if (m3.matches()) {
flag++;

}
if (m4.matches()) {
flag++;

}

if (s.length() > 8 && flag >= 3 && f1(s)) {
return true;
}
return false;
}

//判断是否有长度为3的字符子串相同
static boolean f1(String s) {

for (int i = 0; i < s.length()-3; i++) {
String s1 = s.substring(i,i+3);
String s2 = s.substring(i+3);

if (s2.contains(s1)) {

return false;

}
}

return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: