函数的习题总结(续)

本文主要探讨了六个关于Java字符串的编程题目,包括密码合法性验证、查找特定字符次数、倒序字符串、转换大写、比较字符串相似度以及解析十六进制字符。每个题目都提供了详细的分析和解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一次我们说了一些简单的题,今天我们来看一些关于字符串的题。

第一题

分析:

  1. 先提示用户输入密码(String password)
  2. 将密码传入boolean  isValid(password) 返回值是true,就是合法的;返回值是false,密码不合法
  3. 定义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';
    }
}

结果展示:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值