注:s.leng()和s.leng的区别:
s.length是针对java中数组的,length是数组的一个属性,用来表示数组的长度
s.length()则是字符串的一个方法,用来返回字符串的长度的
字符串是没有length属性的,只有length()方法
数组有length属性,而没有length()方法
题目分析:首先提示用户输入密码,当用户输入密码后,对密码进行判断,从密码的长度,组成以及是不是所含数字大于等于2,如果这三个条件都满足那么这个密码是合法的,若出现有一个不符合,密码都是非法的。
注:定义字符串用s.nextLine()
import java.util.*;
class test4{
public static void main(String[] args){
//1.提示用户输入密码(String password)
Scanner s=new Scanner(System.in);
System.out.print("请输入密码");
String password=s.nextLine();
//2.将密码传入 boolean isValid(password)
if(isValid(password)){//假设我们已经写了isValid这个函数
System.out.println("密码规范");
}else{
System.out.println("密码不规范");
}
}
//3.isValid()
//3.1长度 isLength
//3.2组成 isContant
//3.2.1 isLetter 判断字母
//3.2.2 isDigit 判断数字
//3.3特殊至少两数字 isNum isDigit
public static boolean isValid(String s){
return isLength(s)&&isContant(s)&&isNum(s);//return指的是返回为true
}
public static boolean isLength(String s){//判断d长度是否大于等于8
return s.length()>=8;
}
public static boolean isContant(String s){
char c=' ';//定义一个新的字符
for(int i=0;i<s.length();i++){
c=s.charAt(i);//获取角标为i位置的字符,返回的是字符
if(!isLetter(c)&&!isDigit(c)){
return false;
}
}
return true;
}
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';
}
public static boolean isNum(String s){
int count=0;
char c=' ';
for(int i=0;i<s.length();i++){
if(isDigit(c)){
c=s.charAt(i);
count++;
}
}
return count>=2;
}
}
题目分析:题目要求输出两个子串的最长共同前缀,我的想法是,先定义两个字符串,比较两个字串的大小,比较出来之后开始从角标0遍历两个字符串,当出现字符不一样的时候,截取子串,返回截取的小串,这个小串就是共同子串
截取子串:s.substring(0,i)意思是截取s中从角标0到角标i的子串
import java.util.*;
class test11{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.print("请输入字符串");
String s1=s.nextLine();
System.out.print("请输入字符串");
String s2=s.nextLine();
System.out.println(getCommonPrefix(s1,s2));
}
public static String getCommonPrefix(String s1,String s2){//共同前缀
//先判断s1,s2两个串的大小
String minStr="";
String maxStr="";
if(s1.length()<=s2.length()){
minStr=s1;
maxStr=s2;
}else{
minStr=s2;
maxStr=s1;
}
for(int i=0;i<minStr.length();i++){
if(minStr.charAt(i)!=maxStr.charAt(i)){
return minStr.substring(0,i);//截取小串,从角标0开始到角标i结束
}
}
return minStr;
}
题目分析:以AB8C分析,转化为为十进制是A*16^3+B*16^2+8*16^1+C*16^0
幂的变化为 3 2 1 0
角标的变化 0 1 2 3
我们就会发现:角标=串的长度-1-幂
我们从幂=0开始遍历,就会得出对应角标的字符,我们在十六进制中会发现,它会出现A~F的字符,我们就要对遍历之后的字符进行换算,我们都知道 A=10 B=11 C=12 D=13 E=14 F=15,我们就可以用(c-'A'+10)它就代表获取到的字符与A之间的差+10 就能将该字符化为数字
import java.util.*;
class test12{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.print("请输入十六进制数");
String hex=s.nextLine();
System.out.println(hexToDecimal(hex));
}
public static int hexToDecimal(String hex){
int num=0;
char c=' ';
for(int i=0;i<hex.length();i++){
c=hex.charAt(hex.length()-1-i);
if(isLetter(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';
}
}