1.(检测密码)一些网站对于密码具有一些规则。编写一个方法,检测字符串是否是一个有效密码。假定密码规则如下:
●密码必须至少8位字符。
●密码仅能包含字母和数字。
●密码必须包含至少两个数字。
编写一个程序,提示用户输入一个密码,如果符合规则,则显示Valid Password, 否则显示Invalid Password。
- 解题思路:我们可以创建多个函数,分别用来检测是否满足上面的条件,nextLine()会接受你回车之前的所有输入,包括空格和符号,创建一个函数isDigit判断是否为数字,另一个函数isLetter判断是否为字母
import java.util.Scanner;
class Demo01{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("请输入密码:"); //提示用户输入密码
String password=scanner.nextLine();
if(isValid(password)){
System.out.println("密码合法!");
}else{
System.out.println("密码不合法!");
}
}
public static boolean isValid(String s){ //是否满足三个条件
return isLengthValid(s)&&isContentValid(s)&&isNumberValid(s);
}
public static boolean isLengthValid(String s){ //第一个条件长度最少8字符
return s.length()>=8;
}
public static boolean isContentValid(String s){ //第二个条件
char c=' ';
for(int i=0;i<s.length();i++){ //循环判断其字符串的每个字符都是否满足
c=s.charAt(i);
if(!isLetter(c)&&!isDigit(c)){
return false; //如果有不是数字或字母的,则输出false
}
}
return true;
}
public static boolean isNumberValid(String s){ //第三个条件判断是否超过两个数字
int count=0;
char c=' ';
for(int i=0;i<s.length();i++){
c=s.charAt(i);
if(isDigit(c)){
count++; //如果是数字则count+1
}
}
return count>=2; //如果count大于或等于2则输出turn
}
// a~z A~Z 只需要比较ASCII值
// 'a'<=c<='z' || 'A'<=c<='Z'
// '0'<=c<='9'
public static boolean isLetter(char c){
return c>='a'&&c<='z' || c>='A'&&c<='Z';
}
public static boolean isDigit(char c){
return c>='0'&&c<='9';
}
}
2.(最长的共同前缀)编写一个程序,提示用户输人两个字符串,显示两个字符串最长的共同前缀。
- 解题思路:我们可以通过charAt(),来从字符串的首位开始对比每个字符,相同则继续,不同则停止并输出结果,s.substring(a,b)意思是输出s字符串的从a位置到b位置的字符
class Demo02{
public static void main(String[] args){
String s1="Welcome";
String s2="Welcome";
System.out.println(getCommonPrefix(s1,s2)); //传参
}
public static String getCommonPrefix(String s1,String s2){
int pa=0; // 相当于s1的指针
int pb=0; // 相当于s2的指针
while(true){
if(s1.charAt(pa)!=s2.charAt(pb)){
return s1.substring(0,pa); //返回s1的从首位到pa位置的字符
}
if(s1.charAt(pa)==s2.charAt(pb)){ //如果当前字符一样则+1
pa++;
pb++;
}
if(pa==s1.length()){
return s1;
}
if(pb==s2.length()){
return s2; //超过字符串长度则退出循环
}
}
}
}
3.程序输入AB8C十六进制数,用下面的方法将该数转换为一个十进制数:
public static int hexToDecimal(String hex)
- 解题思路:
class Demo03{
public static void main(String[] args){
String s="AB8C"; //令字符串s为AB8C
System.out.println(hexToDeimal(s)); //将s传参并输出
}
public static int hexToDeimal(String s){
int num=0;
char c=' ';
for(int i=0;i<s.length();i++){
c=s.charAt(s.length()-1-i); //从后往前
if(isLetter(c)){ //如果c为字母
num+=(c-'A'+10)*Math.pow(16,i);
}else{
num+=(c-'0')*Math.pow(16,i);
}
}
return num;
}
public static boolean isLetter(char c){ //判断是否为字母
return c>='A'&&c<='F';
}
}