上一次我们说了一些简单的题,今天我们来看一些关于字符串的题。
第一题
分析:
- 先提示用户输入密码(String password)
- 将密码传入boolean isValid(password) 返回值是true,就是合法的;返回值是false,密码不合法
- 定义isValid()方法
- 长度 isLengthValid() 字符串的长度要大于8
- 组成 isContentValid() 因为必须含有字母和数字,利用for循环进行遍历,先获取到当前字符串的字符,再需要定义两个方法 isLetter(c)和isDigit(c),分别用来判断该字符是否为字母或数字。判断是否为字符或者数字,只需要 比较ASCII值即可,可以这样写 c>='a'&&c<='z' || c>='A'&&c<='Z'; c>='0'&&c<='9';
- 至少两个数字 isNumberValid()
三个条件都符合,是“且”的关系,那么就是一个合法的密码!
import java.util.Scanner;
class Demo04_04{
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){
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;
}
}
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++;
}
}
return count>=2;
}
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';
}
}
结果展示:
第二题
分析:利用for循环遍历,如果字符串中第i个字符等于你要找的"e",那么就count++。最后返回count。
class Demo04_08{
public static void main(String[] args){
String s="abcasjdjhsadadbhasdvasbd";
System.out.println(count(s,'a'));
}
public static int count(String s,char c){
int count=0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)==c){
count++;
}
}
return count;
}
}
结果展示:
第三题
分析:我们可以通过角标获取,那就直接倒着遍历,用for循环,从(长度-1)开始,分别取出来,跟res相加即可。最终返回res.
class Demo04_09{
public static void main(String[] args){
String s="ABCD";
System.out.println(reverse(s));
}
public static String reverse(String s){
String res="";
for(int i=s.length()-1;i>=0;i--){
res+=s.charAt(i);
}
return res;
}
}
结果展示:
第四题
分析:利用for循环遍历,将当前的字符拿出来,通过调用大写字母的方法,判断是否为大写字母,判断方法在第一题提到了。
class Demo04_10{
public static void main(String[] args){
String s="Welcome to Java";
System.out.println(getUpperCase(s));
}
public static int getUpperCase(String s){
int count=0;
for(int i=0;i<s.length();i++){
if(isUpperCase(s.charAt(i))){
count++;
}
}
return count;
}
public static boolean isUpperCase(char c){
return c>='A'&&c<='Z';
}
}
结果展示:
第五题
分析:传入两个字符串,遍历,从左到右依次比较,如果不相等的话,意味着之前所有的都相等。
当两个字符串不相等时,遍历小的字符串,我们需要盘判断两个字符串的大小。定义两个指针,从0开始,考虑三种情况,s1=s2;s1>s2;s1<s2。
class Demo04_11{
public static void main(String[] args){
String s1="Welcome to C++";
String s2="Welcome to programming";
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);
}
if(s1.charAt(pa)==s2.charAt(pb)){
pa++;
pb++;
}
if(pa==s1.length()){
return s1;
}
if(pb==s2.length()){
return s2;
}
}
}
}
结果展示:
第六题
分析:我们要注意,十六进制的字母只有"A-F",我们将字符取出来,将ABCDEF转换成相应的数字
方法是(c - 'A' + 10)就可以直接转换了,数字的话,就直接(c - '0').
class Demo04_12{
public static void main(String[] args){
String s="AB8C";
System.out.println(hexToDeimal(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)){
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';
}
}
结果展示: