字符串反转、自定义排序、注册问题、数据类型统计

简介: 一些Java相关的练习题

@TOC

前言

刷dy刷了十个视频五个视频讲字符串、排序和相关的面试题,不禁心头一震写下此文,又温习了一遍排序,和算法
想当初比赛的时候,被一个反转指定字符串折磨的半死不活,再也不想回到过去了

字符串反转(🏁)

场景:用户输入一串字符,根据用户输入的指令反转相应的字符
在这里插入图片描述

**思路:
1.编写一个静态方法,可以接受用户传入的字符串,以及反转的区间
2.针对输入的内容要进行判断(if)
3.针对用户输入的字符串,将其转成char[]数组(为什么是char? 因为字符串的最小元素是字符)
4.利用一个for循环遍历数组,传进去两个变量一首一尾,for循环的过程抽象成从两端到中间的形式,在此过程中达到交换两个不同位置元素的目的
在这里插入图片描述
5.异常处理保证程序健壮性(没达到if的条件就抛出运行异常),在主函数接收异常并处理**
public class String01 {
    public static void main(String[] args) {
        System.out.println("=====反转前=====");
        String str = "abcdefg";
        System.out.println(str);
        System.out.println("=====反转后=====");
        try {
            str = method(str, 2, 6);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return;
        }
        System.out.println(str);
    }
    public static String method(String str, int n1, int n2) {
        //做一个验证
        //重要技巧——先写出正确的情况然后取反!!!!!!!!!!!!!!!!!!!!!!!!!!!
        if (!(str != null&& n1>=0&&n1>n2&&n2<str.length())) {
            throw new RuntimeException("参数不正确");
        }
            char[] chars = str.toCharArray();
            char temp = ' ';
            for (int i = n1, j = n2; i < j; i++, j--) {
                temp = chars[i];
                chars[i] = chars[j];
                chars[j] = temp;
            }
            return new String(chars);
        }
}

定制排序(🚩)

场景:从大到小,从小到大排序自由切换

**思路:
1.写一个冒泡排序的静态方法,可以向形参传入要比较的数组,Comparator对象
2.利用匿名内部类实现Comparator接口达到自定义的功能
3.把Comparator对象返回的结果作为执行排序的条件
4.异常处理**
public class ArraysTest {
    public static void main(String[] args) {
        int[] arr = {1, -9, 8, 55, 4};
bubble01(arr, new Comparator() {
    @Override
    public int compare(Object o1, Object o2) {
        int i1= (Integer) o1;
        int i2= (Integer) o2;
        return i1- i2;  // return i2- i1;
    }
});
        System.out.println(Arrays.toString(arr));
    }
    public static void bubble01(int[] arr, Comparator c) {   //排好以后本质还是数组
        int temp = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i - 1; j++) {
                //数组排序的值由c.compare(arr[j],arr[j+1])返回的值决定
                if (c.compare(arr[j],arr[j+1])>0) {  //从小到大
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
}

注册问题(🏁)

场景:输入用户名、密码、邮箱,如果信息录入正确,则提示注册成功,否则生成异常对象要求:
**1.用户名长度为2或3或4
2.密码的长度为6,要求全是数字
3.邮箱中包含@和.并且@在.的前面**

**思路:
1.大前提是输入不为空
2.用户名长度通过比较字符串长度实现
3.通过两个boolean类型的方法实现密码和邮箱的判别功能(返回true\false结合if比较直接)
4.邮箱格式可以通过比较字符串中指定字符下标来实现
5.异常处理**
  public static void main(String[] args) {
        String name = "pyq";
        String ps = "123456";
        String em = "123@qq.com";
        try { //try-catch 维护程序 接收异常
            check(name, ps, em);
            System.out.println("恭喜你注册成功!");
        } catch (Exception e) {  //接收check方法中可能抛出的异常并输出异常终止程序
            System.out.println(e.getMessage());
        }
    }
    public static void check(String userName, String passWord, String email) {
        if (!(userName != null && passWord != null && email != null)) {
            throw new RuntimeException("不能输入空白哦~~~");
        }
        int ul = userName.length();
        int pl = passWord.length();
        if (!(ul >= 2 && ul <= 4)) {   //用户名长度为2或3或4
            throw new RuntimeException("你输入的用户名不正确~");  //不合条件——抛出异常
        }
        if (!(isDigtal(passWord) && pl == 6)) {//密码的长度为6,要求全是数字isDigital
            throw new RuntimeException("您输入的密码有误~");
        }
        if (!(eCheck(email))) {  //邮箱中包含@和.并且@在.的前面
            throw new RuntimeException("您输入的邮箱格式不正确~");
        }
    }
    public static boolean isDigtal(String password) {  //此方法用于判断输入的密码是否全为数字
        char[] m1 = password.toCharArray();//通过把输入的字符串密码转成字符数组,遍历比较来确定
        for (int i = 0; i < m1.length; i++) {
            if (m1[i] < '0' || m1[i] > '9') {
                return false;
            }
        }
        return true;
    }
    public static boolean eCheck(String email) { //此方法用于判断邮件里的@与.问题
        int i = email.indexOf("@");   //通过获取字符串下标并比较的方式实现功能
        int j = email.indexOf(".");
        if (!(i < j && i >= 0)) {
            return false;
        }
        return true;
    }
}

数据类型统计

场景:用户输入,判断字符串里面有多少个大写字母,多少个小写字母,多少个数字

**1.字符串转成char[]字符数组
2.遍历数组与'0','9','a','z','A','Z'比较
3.异常处理**
public class homework03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入字符串~");
        String eg=scanner.next();
        printName(eg);
    }
    public static void printName(String str) {
        if (str == null) {
            System.out.println("不要输入为空!");
            return;
        }
        int sL = str.length();
        int numCount = 0;  //用于计数的变量
        int lowerCount = 0;
        int upperCount = 0;
        char[] m1 = str.toCharArray();
        //老套路 把输入的字符串转成字符数组通过遍历的方式 进行逻辑判断实现功能
        for (int i = 0; i < sL; i++) {
            if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
                numCount++;
            } else if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') {
                lowerCount++;
            } else if (str.charAt(i) >= 'A' && str.charAt(i) <= 'z') {
                upperCount++;
            }
        }
        System.out.println("数字有:" + numCount + "\n小写字母有:" +
                lowerCount + "\n大写字母有:" + upperCount);
    }
}

Ps:这个匿名内部类真是好难用啊
厨艺怎么样,大杂烩好吃吗?

相关文章
|
2月前
|
算法 前端开发
自定义字符串排序
自定义字符串排序
15 0
|
1月前
|
Java 索引
Java实现字符串倒序打印
Java实现字符串倒序打印
25 0
|
2月前
|
Java
java字符串练习题4、统计一行字符串中所有的字符类型数量
java字符串练习题4、统计一行字符串中所有的字符类型数量
29 0
|
3月前
|
C语言
c语言实现姓名排序———字符串复制函数,字符串比较函数
c语言实现姓名排序———字符串复制函数,字符串比较函数
自定义排序的常用方式
自定义排序的常用方式
|
6月前
|
搜索推荐 C++
深入解析 qsort 排序(上),它为什么是万能排序?
深入解析 qsort 排序(上),它为什么是万能排序?
43 0
|
7月前
|
JSON 数据格式
非常实用的5种json数组去重方法,函数实现思路竟是chatgpt帮我写的!
你敢信这5种json数组去重方法的实现思路竟然是chatgpt写的,chatgpt对函数的理解也太准确了吧!
101 0
|
9月前
|
PHP
php数组学习(1):固定格式的字符串分割成数组后内容去重
php数组学习(1):固定格式的字符串分割成数组后内容去重
31 0
|
10月前
sort()排序以及多个属性数组对象排序(按条件排序)
sort()排序以及多个属性数组对象排序(按条件排序)
56 0
sort() 函数按照字符串顺序对值进行排序。
sort() 函数按照字符串顺序对值进行排序。
129 0