字符串——第三部分(leecode+较难练习)

字符串——第三部分(leecode+较难练习)

1.罗马数字转换

采用两种方法解决问题,一种用查表法,一种用switch方法(JDK12以上的新写法),区别是在处理罗马数字与原字符对应时采用不同方法

方法1:利用查表法

所用方法(2种):检验字符串合规方法   与    罗马查表法

主程序:注意需要将遍历后的字符串,减去48(0的ascii码),转为int类型才可以使用

方法2:switch法

所用方法(2种):检验字符串合规方法 (与方法1相同)  与    switch法(如下)

当switch的每句话都只产生同一个功能——赋值时,可采用如下形式:
string str = switch(i){};,但要在大括号后面补分号!!!!!!

主程序:无需减去减去48(0的ascii码),直接使用字符即可

2. 调整字符串

套路:对于要修改字符串内容的问题,采用三种方法解决问题,第一种:利用subString截取,把左边字符截取出来拼接到右面;第二种:将字符串变成一个字符数组,调整字符数组里面的数据,最后将字符数组变成字符串;第三种(个人思路),采用stringBuilder,利用deletecharat方法和append()。

方法1:利用subString截取,执行旋转操作

构造方法:

若长度不等直接false:

主程序:

方法2:利用字符串数组,执行旋转操作

str.toCharArray()方法,作用就是将字符串转变为字符数组,和绿色注释代码效果相同,通过更改索引位,来替换值,从而达到旋转效果。

方法3:stringBuilder,利用deletecharat方法和append()

deletechar:

3.键盘输入任意字符串,打乱里面的内容

同理是改变字符串内容,考虑上述三种方法,最后采用字符数组,并采用随机索引方式进行操作

4. 生成验证码

内容:可以是小写字母,也可以是大写字母,还可以是数字、

规则:

长度为5
​
内容中是四位字母,1位数字。
​
其中数字只有1位,但是可以出现在任意的位置。

思路1:

1、先将所有字母,数字存在一个53位的字符数组中;2、将数组利用stringbuilder进行拼接,前四位random随机抽取字母(索引0-51位),最后一位数字(索引52位);3、将拼好的字符串转换位字符数组,并利用random随机抽取索引,从而起到随机位效果。

public class Leecode4 {
    public static void main(String[] args) {
        //随机生成验证码,5位,4位字母,1位数字,数字可以出现在任意位置
        char []arr = new char[53];
        Random sc = new Random();
        for (int i = 0; i < arr.length; i++) {
            if (i < 26) {
                arr[i] = (char) (97 + i);
            }
            if (i >= 26 && i <=51) {
                arr[i] = (char) (65 + i - 26);
            }
            if(i==52){
                int number =sc.nextInt(10);
                arr[i] = (char) (48 +number);
            }
        }
        //将数组拼好,前四位字母,最后一位数字
        StringBuilder sb =new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int index1 =sc.nextInt(52);
            sb=sb.append(arr[index1]);
        }
        String str = sb.append(arr[52]).toString();
        String result = randomIndex(str);
        System.out.println(result);
    }
    public static String randomIndex(String str){
        char[] c = str.toCharArray();
        Random sc = new Random();
        int index =sc.nextInt(c.length);
        char temp;
        for (int i = 0; i < c.length; i++) {
            temp=c[i];
            c[i]=c[index];
            c[index]=temp;
        }
        String newArr = new String(c);
        return newArr;
    }

}

思路2:随机生成5个字母,然后随机一位索引改成数字

public class Leecode4Case2 {
    public static void main(String[] args) {
        //定义字母数组
        char []arr = new char[52];
        Random sc = new Random();
        for (int i = 0; i < arr.length; i++) {
            if (i < 26) {
                arr[i] = (char) (97 + i);
            }else {
                arr[i] = (char) (65 + i - 26);
            }
        }
        //拼接纯字母组合
        StringBuilder sb =new StringBuilder();
        for (int i = 0; i < 5; i++) {
            int index = sc.nextInt(52);
            sb=sb.append(arr[index]);
        }
        //定义随机数字索引,将随机一位字母改为数字
        int numberIndex = sc.nextInt(5);
        int number = sc.nextInt(10);
        //将stringbuilder转为string转为char数组
        char[] newArr = sb.toString().toCharArray();
        newArr[numberIndex]=(char)(48+number);
        String str = new String(newArr);
        System.out.println(str);
    }

}

5.请编写程序,由键盘录入一个字符串,统计字符串中英文字母和数字分别有多少个。比如:Hello12345World中字母:10个,数字:5个。

6.num1、num2均用字符串表示,乘积也用字符串表示

public class leecode6 {
    public static void main(String[] args) {
        //num1、num2均用字符串表示,乘积也用字符串表示
        String num1 ="256";
        String num2 ="16";
        int number1 = method(num1);
        int number2 = method(num2);
        int numResult = number1 * number2;
        String result =new StringBuilder().append(numResult).toString();
        System.out.println(result);
    }
    //字符串变为整数
    public static int method(String num){
        char[] arr = num.toCharArray();
        int result =arr[0]-48;
        for (int i = 1; i < arr.length; i++) {
            int number = arr[i] - 48;
            result=result*10+number;
        }
        return result;
    }
}

7.输出除空格外的最后一个单词(leecode)

方法1:反向遍历数组,遇到空格就break,利用stringBuilder反向添加字符,遇到空格后reserve,然后tostring。

public class Leecode7 {
    public static void main(String[] args) {
        String str ="Hello DuanDuan EE";
        StringBuilder sc =new StringBuilder();
        for (int i = str.length()-1; i >= 0; i--) {
            char c = str.charAt(i);
            if (c==' '){
                break;
            }else {
                sc=sc.append(c);
            }
        }
        String strEnd = sc.reverse().toString();
        System.out.println("解释:最后一个单词是长度为"+strEnd.length()+"的"+strEnd);
    }

}

方法2:用索引找到最大空格索引位,加1,然后对字符串substring该索引

public class Leecode7Case2 {
    public static void main(String[] args) {
        String str ="Hello DuanDuan EE";
        String strEnd = str.substring(findIndex(str));
        System.out.println("解释:最后一个单词是长度为"+strEnd.length()+"的"+strEnd);
    }
    //用索引找到最大空格,然后substring
    public static int findIndex(String str){
        char[] arr = str.toCharArray();
        int index = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]==32){
                index=i;
            }
        }
        return index+1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值