• Java8.0 lambda表达式练习


    1、HJ34 图片整理

    图片整理_牛客题霸_牛客网

    描述

    Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过代码解决。

    Lily使用的图片使用字符"A"到"Z"、"a"到"z"、"0"到"9"表示。

    数据范围:每组输入的字符串长度满足  1≤n≤1000 

    输入描述:

    一行,一个字符串,字符串中的每个字符表示一张Lily使用的图片。

    输出描述:

    Lily的所有图片按照从小到大的顺序输出

    示例1

    输入:Ihave1nose2hands10fingers

    输出:0112Iaadeeefghhinnnorsssv

    Java代码

    1. import java.util.Arrays;
    2. public class Main {
    3. public static void main(String[] args) {
    4. String str = "Ihave1nose2hands10fingers";
    5. //基础方法:将字符串转换为数组,对数组进行排序,最后输出数组
    6. char[] chs = str.toCharArray();
    7. Arrays.sort(chs);
    8. System.out.println(chs);
    9. //优化:用 Java Stream 和 lambda表达式简化代码
    10. str.chars().mapToObj(ch -> (char)ch).sorted().forEach(System.out::print);
    11. }
    12. }

    2、HJ21 简单密码

    简单密码_牛客题霸_牛客网

    描述

    现在有一种密码变换算法。

    九键手机键盘上的数字与字母的对应: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9.

    而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。

    数字和其它的符号都不做变换。

    数据范围: 输入的字符串长度满足 1≤n≤100 

    输入描述:

    输入一组密码,长度不超过100个字符。

    输出描述:

    输出密码变换后的字符串

    示例1

    输入:YUANzhi1987

    输出:zvbo9441987

    Java代码(自测版)

    1. public class Main {
    2. public static void main(String[] args) {
    3. String str = "YUANzhi1987";
    4. str.chars().mapToObj(num -> {
    5. if('a' <= num && num <= 'a' + 25){//小写字母
    6. if(num <= 'a' + 2) return 2;
    7. else if(num <= 'a' + 5) return 3;
    8. else if(num <= 'a' + 8) return 4;
    9. else if(num <= 'a' + 11) return 5;
    10. else if(num <= 'a' + 14) return 6;
    11. else if(num <= 'a' + 18) return 7;
    12. else if(num <= 'a' + 21) return 8;
    13. else return 9;
    14. }
    15. if('A' <= num && num <= 'A' + 24) return (char)(num - ('A' - 'a') + 1);
    16. if(num == 'A' + 25) return 'a';
    17. return (char) num;
    18. }).forEach(System.out::print);
    19. }
    20. }

    Java代码(提交版)

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner(System.in);
    5. String str = scanner.next();
    6. str.chars().mapToObj(num -> {
    7. if ('a' <= num && num <= 'a' + 25) { //小写字母
    8. if (num <= 'a' + 2) return 2;
    9. else if (num <= 'a' + 5) return 3;
    10. else if (num <= 'a' + 8) return 4;
    11. else if (num <= 'a' + 11) return 5;
    12. else if (num <= 'a' + 14) return 6;
    13. else if (num <= 'a' + 18) return 7;
    14. else if (num <= 'a' + 21) return 8;
    15. else return 9;
    16. }
    17. if ('A' <= num && num <= 'A' + 24) return (char)(num - ('A' - 'a') + 1);
    18. if (num == 'A' + 25) return 'a';
    19. return (char) num;
    20. }).forEach(System.out::print);
    21. }
    22. }

    3、HJ36 字符串加密

    字符串加密_牛客题霸_牛客网

    描述

    有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,将所得结果作为新字母表开头,并将新建立的字母表中未出现的字母按照正常字母表顺序加入新字母表。如下所示:

    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

    T R A I L B Z E S C D F G H J K M N O P Q U V W X Y (实际需建立小写字母的字母表,此字母表仅为方便演示)

    上面其他用字母表中剩余的字母填充完整。在对信息进行加密时,信息中的每个字母被固定于顶上那行,并用下面那行的对应字母一一取代原文的字母(字母字符的大小写状态应该保留)。因此,使用这个密匙, Attack AT DAWN (黎明时攻击)就会被加密为Tpptad TP ITVH。

    请实现下述接口,通过指定的密匙和明文得到密文。

    数据范围:1≤n≤100  ,保证输入的字符串中仅包含小写字母

    输入描述:

    先输入key和要加密的字符串

    输出描述:

    返回加密后的字符串

    示例1

    输入:

    nihao
    ni
    

    输出:

    le

     Java代码(自测版)

    • 用 IntStream.range('a', 'z' + 1) 方法生成了26个字母的流。
    • 用 filter 方法进行逐个过滤,简化了判断语句。
    1. import java.util.LinkedList;
    2. import java.util.List;
    3. import java.util.Scanner;
    4. import java.util.stream.IntStream;
    5. public class StringEncrypt {
    6. public static void main(String[] args) {
    7. String key = "ybkgenngvjrajenzeqhmamrptohmdmxfmxngjg";
    8. String str = "zu";
    9. List list = new LinkedList<>();
    10. //通过 Stream 和 lambda表达式,将 26 个字母填充到list集合中取
    11. IntStream.range('a', 'z' + 1).forEach(c -> list.add((char) c));
    12. List list2 = new LinkedList<>();
    13. //将key中的字符逐个无重复地加到list2中
    14. key.chars().filter(c -> !list2.contains((char) c)).forEach(c -> list2.add((char) c));
    15. //将list中的元素逐个无重复地加到list2中
    16. list.stream().filter(c -> !list2.contains(c)).forEach(c -> list2.add(c));
    17. // System.out.println(list);
    18. // System.out.println(list2);
    19. //加密并输出
    20. str.chars().forEach(c -> System.out.print(list2.get(list.indexOf((char) c))));
    21. }
    22. }

    Java代码(提交版)

    1. import java.util.LinkedList;
    2. import java.util.List;
    3. import java.util.Scanner;
    4. import java.util.stream.IntStream;
    5. public class Main {
    6. public static void main(String[] args) {
    7. Scanner in = new Scanner(System.in);
    8. while (in.hasNext()) {
    9. String key = in.next();
    10. String str = in.next();
    11. List list = new LinkedList<>();
    12. //通过 Stream 和 lambda表达式,将 26 个字母填充到list集合中取
    13. IntStream.range('a', 'z' + 1).forEach(c -> list.add((char) c));
    14. List list2 = new LinkedList<>();
    15. //将key中的字符逐个无重复地加到list2中
    16. key.chars().filter(c -> !list2.contains((char) c)).forEach(c -> list2.add((char) c));
    17. //将list中的元素逐个无重复地加到list2中
    18. list.stream().filter(c -> !list2.contains(c)).forEach(c -> list2.add(c));
    19. //加密并输出
    20. str.chars().forEach(c -> System.out.print(list2.get(list.indexOf((char) c))));
    21. }
    22. }
    23. }

  • 相关阅读:
    物联网AI MicroPython学习之语法UART通用异步通信
    计算机毕业设计ssm高校心理健康咨询平台vknhv系统+程序+源码+lw+远程部署
    微信小程序控制元素显示隐藏
    数据安全出境系列——不合规数据的阻断能力
    【知识网络分析】研究者合作网络(co-investigator)
    C++ day3
    190-Vue中环境变量的配置
    康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(三)
    UNet网络模型学习总结
    unity shader屏幕后处理
  • 原文地址:https://blog.csdn.net/m0_37738114/article/details/134301017