【Java】基础练习(十)

1.判断邮箱

输入一个电子邮箱,判断是否是正确电子邮箱地址。 正确的邮箱地址:

  • 必须包含 @ 字符,不能是开头或结尾
  • 必须以 .com结尾
  • @和.com之间必须有其他字符

(1) Email类:

package swp.kaifamiao.codes.Java.d0823;
/*
 * 输入一个电子邮箱,判断是否是正确电子邮箱地址。
 * 正确的邮箱地址:
 * 必须包含 @ 字符,不能是开头或结尾
 * 必须以 .com结尾
 * @和.com之间必须有其他字符
 */

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class Email {
    /**
     * 判断输入的电子邮箱是否正确
     * @  email 控制台输入
     * @return 布尔型(true/false)
     */
    public static String isEmail(String email){
        // 判断是否包含 @ 字符,且不位于开头或结尾
        if (!email.contains("@") || email.startsWith("@") || email.endsWith("@")){
            return "邮箱无效!";
        }
        // 判断是否以“.com”结尾
        if (!email.endsWith(".com")){
            return "邮箱无效!";
        }
        // 判断“@”和“,com”之间有没有其他字符
        int atIndex = email.indexOf("@");
        int comIndex = email.indexOf(".com");
        if (atIndex+1 > comIndex){
            return "邮箱无效!";
        }
        return "您输入的邮箱有效!";
    }
}

(2) EmailTest测试类:

package swp.kaifamiao.codes.Java.d0823;

import java.util.Scanner;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class EmailTest {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入邮箱:");
        String str = input.next();
        String str1 = Email.isEmail(str);
        System.out.println(str1);
    }
}

(3) 运行效果:

在这里插入图片描述
在这里插入图片描述


2. 生成密码

随机生成一个 6 位的密码,要求:

  • 不包含重复字符
  • 要有字母和数字
  • 不能以数字开头

(1) Email类:

package swp.kaifamiao.codes.Java.d0823;
/*
 *随机生成一个 6 位的密码,要求:
 * 不包含重复字符
 * 要有字母和数字
 * 不能以数字开头
 */

import java.util.Random;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class Password {
    public static void main(String[] args) {
        // 定义一个长度为6的字符数组用来存放密码
        char[] arr = new char[6];
        // 生成数字和字母的字符集合
        String characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        // 创建随机对象
        Random rand = new Random();
        // 设置密码的开头为非数字的随机字母
        arr[0] = characters.charAt(rand.nextInt(52) + 10);
        for (int i = 1; i < arr.length; i++) {
            char randomChar;
            do {
                randomChar = characters.charAt(rand.nextInt(62));
            } while (contains(arr, randomChar));

            arr[i] = randomChar;
        }

        // 将字符数组转换为字符串
        String randomPassword = new String(arr);
        System.out.println("随机生成的密码:" + randomPassword);
    }

    // 判断字符数组中是否包含某个字符

    private static boolean contains(char[] arr, char c) {
        for (char ch : arr) {
            if (ch == c) {
                return true;
            }
        }
        return false;
    }
}

(2)运行效果:

在这里插入图片描述
在这里插入图片描述


3.生成幸运数字

随机生成 20 个 1 ~ 40 之间的不重复幸运数字存储到数组中。 要求:

  • 数组中的数字乱序

(1) LuckyNumbers类:

package swp.kaifamiao.codes.Java.d0823;

/*
生成幸运数字
随机生成 20 个 1 ~ 40 之间的不重复幸运数字存储到数组中。 要求:
数组中的数字乱序
 */

import java.util.Arrays;
import java.util.Random;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class LuckyNumbers {
    public static void main(String[] args) {
        int[] arr = new int[20];

        Random rand = new Random();
        for (int i = 0; i < arr.length;) {
            int num = rand.nextInt(40) + 1;
            Arrays.sort(arr, 0, i);
            if (Arrays.binarySearch(arr, 0, i, num) < 0){
                arr[i ++] = num;
            }
        }

        charge(arr);
        charge(arr);
        charge(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void charge(int[] arr){
        Random random = new Random();
        for (int i = 0; i < 10; i++) {
            int index = random.nextInt(arr.length);
            int index1 = random.nextInt(arr.length);

            int temp = arr[index];
            arr[index] = arr[index1];
            arr[index1] = temp;
        }
    }
}

(2) 运行效果:

在这里插入图片描述


4.去除重复字符

编写一个程序,去除字符串中的重复字符


(1) Deduplication类:

package swp.kaifamiao.codes.Java.d0823;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class Deduplication {
    public static String arrDeduplication(String str){
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (sb.indexOf(String.valueOf(c)) == -1){
                sb.append(c);
            }
        }
        return sb.toString();
    }
}

(2) DeduplicationTest类:

package swp.kaifamiao.codes.Java.d0823;

import java.util.Scanner;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class DeduplicationTest {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入字符串:");
        String str = input.next();
        String result = Deduplication.arrDeduplication(str);
        System.out.println("去重后的字符串为:" + result);
    }
}

(3) 运行效果:

在这里插入图片描述


5.最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

(1)MaxSubstring类:

package swp.kaifamiao.codes.Java.d0823;

import java.util.Arrays;
import java.util.Scanner;

/**
 * {class description}
 *
 * @author SWP
 * @version 1.0.0
 */
public class MaxSubstring {
    public static int maxSub(String str) {
        int count= 0;
        int[] arr = new int[str.length()];
        int max = 0;
        for (int i = 0; i < str.length(); i++) {
            int j = str.codePointAt(i);
            Arrays.sort(arr);
            // 查看元素有没有出现过
            if (Arrays.binarySearch(arr, str.length() - i, arr.length, j) < 0) {
                // 没有出现过
                count ++;
            } else {
                // 出现过
                max = Math.max(max,count);
                count = 1;
                arr = new int[str.length()];
            }
            arr[0] = j;
        }
        max = Math.max(max,count);
        return max;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入字符串:");
        String str = scanner.nextLine();
        int result = maxSub(str);
        System.out.println("最长子串长度为:" + result);
    }
}

(2)运行效果:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值