对称字符串

之前写过类似的,不过这次是要用StringBuilder里面的一些方法来实现,比之前方便很多

这里还是两道题合成一道题来写了,改进了一下,第二个练习用到了StringJoiner类,但是在JDK api1.6中无法查到,大家注意一下

import java.util.Scanner;
import java.util.StringJoiner;

public class StringBuilderDemo {
    public static void main(String[] args) {
        while(true) {
            String str = getString();

            StringBuilder sb = new StringBuilder();
            String str1 = sb.append(str).reverse().toString();
            if (str.equals(str1)) {
                System.out.println("该字符串为对称字符串");
            } else {
                System.out.println("该字符串不是对称字符串");
            }
            String[] arr = getStringArr(str);
            StringJoiner sj = new StringJoiner(", ", "[", "]");
            for (int i = 0; i < arr.length; i++) {
                sj.add(arr[i]);
            }
            System.out.println(sj);
        }

    }

    //键盘录入字符串
    public static String getString() {
        System.out.println("请输入一个字符串:");
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        return str;
    }
    //将字符串转换为数组
    public static String[] getStringArr(String str) {
        String[] arr = new String[str.length()];
        for (int i = 0; i < str.length(); i++) {
            arr[i] = str.charAt(i) + "";
        }
        return arr;
    }
}

转换罗马数字

写法一

package test6;

import java.util.Scanner;

public class replaceRome {
    public static void main(String[] args) {
        
        StringBuilder sb = new StringBuilder();
        String str;
        while (true) {
            str = getString();
            boolean flag = checkString(str);
            if (flag) {
                break;
            } else {
                System.out.println("当前字符串不符合要求,请重新输入");
                continue;
            }
        }
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            int number = c - 48;
            String str1 = getRomeNumber(number);
            sb.append(str1);
        }
        System.out.println(sb);
    }
    //键盘录入数字
    public static String getString() {
        System.out.println("请输入你想转换的数字:");
        Scanner sc = new Scanner(System.in);
        String number = sc.next();
        return number;
    }
    //转换为罗马数字
    public static String getRomeNumber(int number) {
        String[] romeNumber = {"", "Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ"};
        return romeNumber[number];
    }
    //检查输入字符是否满足
    //1.长度小于等于9
    //2.只能是数字
    public static boolean checkString(String str) {
        if (str.length() > 9) {
            return false;
        }
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c < '0' || c > '9') {
                return false;
            }
        }
        return true;
    }
}

写法二

第二种写法是将getRomeNumber方法用which进行改进,但是我这里版本不够,我就只截一下不同的地方,大家可以自己去试试第二种方法

第三张图可以看我报错了,我的JDK是jdk-12.0.2,我搜了一下大于等于jdk14的应该可以

调整字符串

第二种方法是先将字符串转换为数组,然后再进行索引进行转换

写法一

package test6;

import java.util.Scanner;

public class rotateString {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("输入需要转换的字符串");
            String str = sc.next();
            System.out.println("输入对比的字符串");
            String str1 = sc.next();
            if (str.length() == str1.length()) {
                System.out.println(checkStr(str,str1));
            }else{
                System.out.println("两字符串长度不同,请重新输入");
            }
        }

    }

    //判断多次移动后是否相等,相等返回true,不相等返回false
    public static boolean checkStr(String str, String str1) {
        for (int i = 0; i < str.length(); i++) {
            str = rotate(str);
            if (str.equals(str1)) {
                return true;
            }
        }
        return false;
    }

    //移动字符串,将最左侧字符移到最右侧;例如:abcde->bcdea
    public static String rotate(String str) {
        char first = str.charAt(0);
        String end = str.substring(1);

        String result = end + first;
        return result;
    }
}

写法二

package test6;

import java.util.Scanner;

public class rotateString {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("输入需要转换的字符串");
            String str = sc.next();
            System.out.println("输入对比的字符串");
            String str1 = sc.next();
            if (str.length() == str1.length()) {
                System.out.println(checkStr(str,str1));
            }else{
                System.out.println("两字符串长度不同,请重新输入");
            }
        }

    }

    //判断多次移动后是否相等,相等返回true,不相等返回false
    public static boolean checkStr(String str, String str1) {
        for (int i = 0; i < str.length(); i++) {
            str = rotateArr(str);
            if (str.equals(str1)) {
                return true;
            }
        }
        return false;
    }

    //先将字符串转化为字符数组,然后移动索引。
    public static String rotateArr(String str){
        char[] arr = str.toCharArray();

        char first = arr[0];
        for (int i = 1; i < arr.length; i++) {
            arr[i-1]= arr[i];
        }
        arr[arr.length - 1] = first;

        //利用字符数组创建一个字符串对象
        String result = new String(arr);
        return result;
    }
}

打乱字符串

package test6;

/*
/键盘录入字符串,打乱它的顺序
 */

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

public class disturbanceString {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("请输入你想打乱的字符串:");
            String str = sc.next();

            System.out.println("打乱后为: \n" + disturbanceStr(str));
        }
    }

    public static String disturbanceStr(String str) {
        char[] arr = str.toCharArray();
        Random ra = new Random();

        for (int i = 0; i < arr.length; i++) {
            int number = ra.nextInt(arr.length);
            char tmp = arr[i];//定义记录初始a
            arr[i] = arr[number];//arr[number]赋给arr[i]
            arr[number] = tmp;//tmp赋给arr[number]
        }
        String result = new String(arr);
        return result;
    }
}

生成验证码

package test6;

/*
内容:可以是小写字母,也可以是大写字母,还可以是数字
规则:
  	长度为5
  	内容中是四位字母,1位数字。
  	其中数字只有1位,但是可以出现在任意的位置。
 */

import java.util.Random;

public class identifying {
    public static void main(String[] args) {
        char[] arr = new char[52];

        String result = "";


        Random rd = new Random();
        //数组中随机抽取4个字母
        for (int i = 0; i < 4; i++) {
            int index = rd.nextInt(52);
            result = result + getArr(arr)[index];
        }
        int number = rd.nextInt(10);

        result = result + number;


        System.out.println(disturbanceStr(result));
    }

    //大写字母和小写字母都保存到数组当中
    public static char[] getArr(char[] arr) {
        for (int i = 0; i < arr.length; i++) {
            if (i <= 25) {
                arr[i] = (char) (97 + i);
            } else {
                arr[i] = (char) (65 + i - 26);
            }
        }
        return arr;
    }
    public static String disturbanceStr(String str) {
        char[] arr = str.toCharArray();
        Random ra = new Random();

        for (int i = 0; i < arr.length; i++) {
            int number = ra.nextInt(arr.length);
            char tmp = arr[i];//定义记录初始a
            arr[i] = arr[number];//arr[number]赋给arr[i]
            arr[number] = tmp;//tmp赋给arr[number]
        }
        String result = new String(arr);
        return result;
    }
}

字符相乘

package test6;

/*
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,他们的乘积也表示为字符串形式
注意:用已知知识完成
 */

public class multiplicationStr {
    public static void main(String[] args) {
        String num1 = "123";
        String num2 = "12323";

        int number1 = getWholeNumber(num1);
        int number2 = getWholeNumber(num2);

        int result = number1 * number2;
        
        String result1 = result + "";

        System.out.println("运算结果为: " + result1);

    }

    //将字符串转化为数字String->int
    public static int getInt(int number) {
        int[] arr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        return arr[number];
    }

    //将单个数字转化成整个数字,例如1 2 3 -> 123
    public static int getWholeNumber(String str) {
        int result = 0;

        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            int index = c - 48;
            int number1 = getInt(index);
            result = result * 10 + number1;
        }
        return result;
    }
}

最后一题

这道题没题目,就是一个倒着遍历的方法,遇到空格遍历停止即可。

public class p110last {
    public static void main(String[] args) {
        String str = "Hello World is good";

        int count = 0;
        //倒叙遍历,遇到空格结束循环
        for (int i = str.length() - 1; i > 0; i--) {
            char c = str.charAt(i);
            int index = c - 32;
            if (index == 0) {
                break;
            } else {
                count++;
            }
        }
        System.out.println(count);
    }
}