Java - 华为机试训练 - 密码验证合格程序(正则表达式判断)
2016-09-04 20:33
627 查看
时间限制:1秒空间限制:32768K
本题知识点: 字符串 数组
算法知识视频讲解
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有相同长度超2的子串重复
说明:长度超过2的子串
输入描述:
一组或多组长度超过2的子符串。每组占一行
输出描述:
如果符合要求输出:OK,否则输出NG
输入例子:
输出例子:
思路:
合法字符串 :
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;
}
}
本题知识点: 字符串 数组
算法知识视频讲解
题目描述
密码要求: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;
}
}
相关文章推荐
- Java爬虫——抓取静态网页
- Java学习总结记录(2)——JVM、JRE和JDK
- (java题目第3讲)整数进制转换
- Eclipse快捷键 10个最有用的快捷键
- Java Socket编程
- 217. Contains Duplicate java
- 共享可变性设计中存在风险以及解决方法(三)
- Java访问权限范围
- 中介者模式(java版)
- 13.Java基础:常见流----->随机读写流:RandomAccessFile
- eclipse常用快捷键
- java排序算法总结
- 你真的了解一段Java程序的生命史吗
- ubuntu下jdk安装
- JDK初探
- Java 基础:浅析Java中的final关键字
- JAVA中的内存分布
- eclipse maven+mybatis+web项目(一)
- Uva227 Puzzle 谜题 (java版本)
- UVa455 Periodic Strings 周期串 (java版本)