字符和字符串

字符和字符串

1.字符char
1.1 char对应的封装类

package pack6;
public class CharTest {
    public static void main(String args[]) {
        char a = '我';//用单引号,只能有一个字符
        //装箱:类类型=基本数据类型
        Character a1 = a;
        //拆箱 基本数据类型=类类型
        a = a1;
    }
}

1.2 Character常见方法

package pack6;

public class CharTest {

    public static void main(String args[]) {
        System.out.println(Character.isLetter('a'));//判断是否为字母
        System.out.println(Character.isDigit('a'));//判断是否为数字
        System.out.println(Character.isWhitespace(' '));//是否是空格
        System.out.println(Character.isUpperCase('A'));//是否大写
        System.out.println(Character.isLowerCase('a'));//是否小写
        System.out.println(Character.toUpperCase('a'));//转换为大写
        System.out.println(Character.toLowerCase('A'));//转换为小写

        //把字符转换为字符串
        String a2=Character.toString('a');
        System.out.println(a2);
        }
  }      

1.3 练习 字符串转字符串数组

import java.util.Scanner;

public class CharTest {

    public static void main(String args[]) {
        Scanner reader=new Scanner(System.in);
        String str=reader.next();
//      字符串转字符串数组 toCharArray()方法
        char[] cs=str.toCharArray();
        System.out.println(cs);
        }
  }      

2.字符串
2.1 练习 生成随机的字符串

public class CharTest {

    public static void main(String args[]) {
        String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//随机的数字,字母
        Random random=new Random();//Random对象
        StringBuffer sb=new StringBuffer();//StringBuffer对象
        for(int i=0;i<5;i++){  //生成5个字符
            int number=random.nextInt(62);//str的长度
            sb.append(str.charAt(number));//字符串添加
        }
        System.out.println(sb);
        }
 }       

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

注1: 不能使用Arrays.sort() 要自己写
注2: 无视大小写,即 Axxxx 和 axxxxx 没有先后顺序

package pack6;

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


public class CharTest {


    public static String getstr() {

        String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机的字母
        Random random = new Random();//Random对象
        StringBuffer sb = new StringBuffer();//StringBuffer对象,可变字符串
        String s = "";
        for (int i = 0; i < 5; i++) {  //生成5个字符
            int number = random.nextInt(52);//随机生成0到51的数字 [0,51)
            sb.append(str.charAt(number));//往数组StringBuffer中append对象
        }
        s = sb.toString();//转成String
        return s;
    }


    public static void main(String args[]) {
        String[] stringBuffers = new String[8];
        for (int i = 0; i < stringBuffers.length; i++) {
            stringBuffers[i] = getstr();
        }
        System.out.println(Arrays.toString(stringBuffers));//生成8个长度为5的字符串


        //冒泡排序
        for (int i = 0; i < stringBuffers.length - 1; i++) {
            for (int j = i + 1; j < stringBuffers.length; j++) {
                char[] char1 = stringBuffers[i].toCharArray();
                char[] char2 = stringBuffers[j].toCharArray();
                //获取首字母,把首字母转换为小写 按首字母排序
                char1[0] = Character.toLowerCase(char1[0]);
                char2[0] = Character.toLowerCase(char2[0]);
                //由小到大排序 就交换A>B的
                //由大到小排序 就交换A<B的
                if (char1[0] > char2[0]) {
                    String st = stringBuffers[i];
                    stringBuffers[i] = stringBuffers[j];
                    stringBuffers[j] = st;
                }
            }
        }
            //打印排序后
            System.out.println(Arrays.toString(stringBuffers));
            }
  }          

运行结果在这里插入图片描述

2.3 练习-穷举法破解密码

  1. 生成一个长度是3的随机字符串,把这个字符串作为当做密码
  2. 使用穷举法生成长度是3个字符串,匹配上述生成的密码
    要求: 分别使用多层for循环 和 递归解决上述问题

for循环解决问题

package pack6;
import java.util.Random;
public class CharTest {
   static String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机的字母和数字

    public static String getstr() {

        Random random = new Random();//Random对象
        StringBuffer sb = new StringBuffer();//StringBuffer对象,可变字符串
        String s = "";
        for (int i = 0; i < 3; i++) {  //生成5个字符
            int number = random.nextInt(52);//随机生成0到51的数字 [0,51)
            sb.append(str.charAt(number));//往数组StringBuffer中append对象
        }
        s = sb.toString();//转成String
        return s;
    }


    public static void main(String args[]) {
        String code=getstr();
        System.out.println("密码是:"+code);
        //三重循环 暴力枚举
        for(int i=0;i<str.length();i++){
            for(int j=0;j<str.length();j++){
                for(int k=0;k<str.length();k++){
                    //字符转字符串
                    String guess=Character.toString(str.charAt(i))+Character.toString(str.charAt(j))+Character.toString(str.charAt(k));
                    if(guess.equals(code)){
                        System.out.println("猜到了,密码是:"+guess);
                    }
                }
            }
        }
        
}
}

在这里插入图片描述

递归解决问题

package pack6;

import java.util.Random;

public class CharTest {
    static String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//随机的字母和数字
    static char[] ch = new char[3]; //3位密码数组
    static String pw; //密码的中间值
    static boolean flag = false;//判断有没有找到

    //   递归方法枚举
    //   ch有三位 在62个中随便找一个放在第三位 在62个中随便找一个放在第二位 在62个中随便找一个放在第1位
    public static String getPassword(String code, int n) {
        //外部循环 遍历62次(共有62个字符)
        for (int i = 0; i < 62; i++) {
            ch[n - 1] = str.charAt(i);//把str的字符赋值给ch
            pw = new String(ch);//新生成一个pw字符串
            if (n != 1) pw = getPassword(code, n - 1);// 密码长度是3 此时长度未到3
            else {
                //此时找到3个密码了
                if (code.equals(pw)) {
                    flag = true;//设置状态
                }
            }

            //根据状态返回
            if (flag) return pw;
        }
        //没有找到 返回pw
        return pw;
    }


    public static String getstr() {

        Random random = new Random();//Random对象
        StringBuffer sb = new StringBuffer();//StringBuffer对象,可变字符串
        String s = "";
        for (int i = 0; i < 3; i++) {  //生成5个字符
            int number = random.nextInt(52);//随机生成0到51的数字 [0,51)
            sb.append(str.charAt(number));//往数组StringBuffer中append对象
        }
        s = sb.toString();//转成String
        return s;
    }


    public static void main(String args[]) {
        String code = getstr();
        System.out.println("密码是:" + code);

        String res = getPassword(code, 3);
        System.out.println(res);
       }
  }      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值