• Java学习-字符串、字符、ASCII、数字的互相转换


     1 public class test2 {
     2     public static void main(String[] args) {
     3 
     4         // 字符串和字符数组互相转换
     5         // 字符串转字符数组
     6         String str1 = "hiuzb12316";
     7         char[] cs1 = str1.toCharArray();
     8         System.out.println(cs1);// 字符串转字符数组:toCharArray()
     9 
    10         // 字符数组转字符串
    11         String str2 = "";
    12         for (int i = 0; i < cs1.length; i++) {
    13             str2 += cs1[i];
    14         }
    15         System.out.println(str2);// 字符数组转字符串:遍历,拼接即可
    16      //更简单的:String.valueOf(字符数组)
    17         // ASCII和字符互相转换
    18         // 0~9:48~57
    19         // A~Z:65~90
    20         // a~z:97~122
    21 
    22         char a = 'a';
    23         int numOfa = (int) a;// 强制转换即可,下面同理
    24 
    25         int x = 100;
    26         char chOfx = (char) x;
    27         System.out.println(numOfa);
    28         System.out.println(chOfx);
    29 
    30         // 数字和字符互相转换(不能强制转换!)
    31         // 数字转字符串
    32         int i = 12345;
    33         // System.out.println((char) i);// 结果出错,因为ASCII没有12345这么多!!!
    34         String str_1 = String.valueOf(i);// 办法一:String.valueOf(要转的数字对象)
    35         System.out.println(str_1);
    36         Integer it = i;// 办法二:先”装箱“
    37         String str_2 = it.toString();// 再调用toSting()即可
    38         System.out.println(str_2);
    39 
    40         // 字符串转数字
    41         int res = Integer.parseInt(str_1);// Integer.parseInt(要转的字符串对象)
    42         System.out.println(res);
    43     }
    44 }

    进阶运用:创建一个长度是5的随机字符串,随机字符有可能是数字,大写字母或者小写字母

    运用知识点:ASCII与数字的互相转换,随机数

     8     public static char rand() {
     9         int a1 = (int) (Math.round(Math.random() * (122 - 97)) + 97);// a-z
    10         int a2 = (int) (Math.round(Math.random() * (90 - 65)) + 65);// A-Z
    11         int a3 = (int) (Math.round(Math.random() * (57 - 48)) + 48);// 0-9
    12         int oneOfThem = (int) Math.round(Math.random() * 2);// 随机决定a1,a2,a3中的一个
    13 
    14         if (oneOfThem == 0) {
    15             return (char) a1;
    16         } else if (oneOfThem == 1) {
    17             return (char) a2;
    18         } else {
    19             return (char) a3;
    20         }
    21     }
    22 
    23     public static void main(String[] args) {
    24         char cs[] = new char[5];
    25         for (int i = 0; i < cs.length; i++) {
    26             cs[i] = rand();
    27         }
    28         System.out.println(cs);
    29         // 若要字符串格式,把字符数组转换成字符串即可
    30         String str = "";
    31         for (int i = 0; i < cs.length; i++) {
    32             str += cs[i];
    33         }
    34         System.out.println("字符串格式:" + str);
    35     }
    36 }

    运行结果:

     进阶运用2:

    创建一个长度是8的字符串数组
    使用8个长度是5的随机字符串初始化这个数组
    对这个数组进行排序,按照每个字符串的首字母排序(无视大小写)

     1 public class test {
     2 
     3     public static char rand() {
     4         int a1 = (int) (Math.round(Math.random() * (122 - 97)) + 97);// a-z
     5         int a2 = (int) (Math.round(Math.random() * (90 - 65)) + 65);// A-Z
     6         int a3 = (int) (Math.round(Math.random() * (57 - 48)) + 48);// 0-9
     7         int oneOfThem = (int) Math.round(Math.random() * 2);// 随机决定a1,a2,a3中的一个
     8 
     9         if (oneOfThem == 0) {
    10             return (char) a1;
    11         } else if (oneOfThem == 1) {
    12             return (char) a2;
    13         } else {
    14             return (char) a3;
    15         }
    16     }
    17 
    18     public static String randString() {
    19         char cs[] = new char[5];
    20         String str = "";
    21         for (int i = 0; i < 5; i++) {
    22             cs[i] = rand();
    23             str += cs[i];
    24         }
    25         return str;
    26     }
    27 
    28     public static void StringArraySort(String str[]) {//采用简单选择排序
    29         int i, j, min;
    30         String tmp;
    31         for (i = 0; i < str.length; i++) 
    32         {
    33             min = i;
    34             for (j = i + 1; j < str.length; j++) 
    35             {
    36                 if (Character.toLowerCase(str[min].charAt(0)) > Character.toLowerCase(str[j].charAt(0)))
    37                 {
    38                     min = j;
    39                 }
    40             }
    41             tmp=str[i];
    42             str[i]=str[min];
    43             str[min]=tmp;
    44         }
    45     }
    46 
    47     public static void main(String[] args) {
    48 
    49         String str[] = new String[8];
    50         for (int i = 0; i < str.length; i++) 
    51         {
    52             str[i] = randString();//生成随机字符串
    53         }
    54         System.out.println(".................排序前...................");
    55         for (String each : str)
    56         {
    57             System.out.println(each);
    58         }
    59         StringArraySort(str);//对随机字符串按首字母进行排序
    60         System.out.println("..............排序后..............");
    61         for (String each : str) 
    62         {
    63             System.out.println(each);
    64         }
    65     }
    66 }

    运行结果:

    进阶运用:穷举法破解密码

    1. 生成一个长度是3的随机字符串,把这个字符串作为当做密码
    2. 使用穷举法生成长度是3个字符串,匹配上述生成的密码

    要求: 分别使用多层for循环递归解决上述问题

     1 public class test2 {
     2     public static char randChar() {
     3         return (char) ((int) Math.round(Math.random() * (126 - 33) + 33));
     4     }
     5 
     6     public static String qiongJuFa(String passWord) {
     7 
     8         String tryPassWord = "";
     9         for (int i = 33; i <= 126; i++) {
    10             for (int j = 33; j <= 126; j++) {
    11                 for (int k = 33; k <= 126; k++) {
    12                     char t1 = (char) i;
    13                     char t2 = (char) j;
    14                     char t3 = (char) k;
    15                     tryPassWord = "" + t1 + t2 + t3;// 前面必须加 ""
    16                     if (t1 == passWord.charAt(0) && t2 == passWord.charAt(1) && t3 == passWord.charAt(2)) {
    17                         System.out.println("猜测的密码是:" + tryPassWord);
    18                         System.out.println("匹配成功!");
    19 
    20                         return tryPassWord;
    21                     } else {
    22                         tryPassWord = "";
    23                     }
    24                 }
    25             }
    26         }
    27         return "";
    28     }
    29 
    30     public static void recursion(String psw, char[] tpsw, int num) {// num是tpsw第几位
    31         if (num < 3) {
    32             int i;
    33             for (i = 33; i <= 126; i++) {// 取的ASCII范围是33-126
    34                 tpsw[num] = (char) i;
    35                 if (psw.charAt(num) == tpsw[num]) {
    36                     recursion(psw, tpsw, ++num);// 第一位匹配成功,递归调用去判断下一位
    37                     break;// 递归的“归”的时候,因为已经匹配成功了,无须再次循环,所以直接break
    38                 }
    39             }
    40         } else {
    41             System.out.printf("猜测的密码是:%s%n", String.valueOf(tpsw));
    42             System.out.println("猜测成功!");
    43         }
    44 
    45     }
    46 
    47     public static void main(String[] args) {
    48 
    49         String passWord = "";
    50         for (int i = 0; i < 3; i++) {
    51             passWord += randChar();
    52         }
    53         System.out.println("原密码:" + passWord);
    54 
    55         // 穷举法
    56         long st1 = System.currentTimeMillis();
    57         String tpsw = qiongJuFa(passWord);
    58         long et1 = System.currentTimeMillis();
    59         System.out.println("loop spent " + (et1 - st1) + "ms");
    60         // 递归法
    61         char tryPassWord[] = new char[3];
    62         long st = System.currentTimeMillis();
    63         recursion(passWord, tryPassWord, 0);
    64         long et = System.currentTimeMillis();
    65         System.out.println("recursion spent " + (et - st) + "ms");
    66     }
    67 }

    运行结果:

  • 相关阅读:
    GZDBHelper C#.NET开源的数据库访问组件
    判断页面是否是静态页面
    Web应用程序dll获取当前程序集路径问题
    webAPI 上传文件
    解决.Net Core3.0 修改cshtml代码之后必须重新生成才可以看到效果
    .net core使用LESS
    test
    JS实现线程锁(Promise),NodeJS并发锁处理
    参考护照编码实现算法JS生成带字母有序编码
    centos7防火墙开放端口与关闭防火墙
  • 原文地址:https://www.cnblogs.com/gilgamesh-hjb/p/12165251.html
Copyright © 2020-2023  润新知