Java对字符串的操作

171 阅读2分钟

一、把通过键盘录入的阿拉伯数字转换为罗马数字(在进行字符转换时有两种方法:1.定义字符串数组 2.通过switch)

要求:

image.png

代码实现:

import java.util.Scanner;

public class NumberConversion {
    public static void main(String[] args) {
        String str;
        StringBuilder sb = new StringBuilder();
        while (true) {
            //通过键盘录入一个字符串
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入要转换的字符串:");
            str = scanner.next();
            boolean falg = checkNumber(str);
            if(falg){
              
                for (int i = 0; i < str.length(); i++) {
                    char c = str.charAt(i);
                    //如果不记得字符'0'所对应的数字48可通过                                                    //System.out.println('0'+0);
                      //第一种方式:把字符数字转换为基本类型数字
                    int number = c - 48;
                    String conversion = conversion(number);
                    // 第二种方式:switch方法调用
                    // String conversion = conversion2(c);
                    sb.append(conversion);
                }
                System.out.println(sb);
             break;
            }else {
                System.out.println("你输入的字符串不符合规矩,请重新输入。");
                continue;
            }
        }
    }
 //校验参数
    public static boolean checkNumber(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;
    }
    //第一种方式:通过定义一个字符数组来进行数字转换
    public static String conversion(int number){
        String []arr ={"","I","II", "III","IV","V","VI","VII","VIII","IX"};
        return arr[number];
    }
    //第二方式:通过switch方法,同时在调用的时候不需转换
    public static String conversion2(char number){
        String str;
        switch (number){
            case '0':str="";break;
            case '1':str="I";break;
            case '2':str="II";break;
            case '3':str="III";break;
            case '4':str="IV";break;
            case '5':str="V";break;
            case '6':str="VI";break;
            case '7':str="VII";break;
            case '8':str="VIII";break;
            case '9':str="IX";break;
            default:str="";break;
        }
        return str;
    }
}

二、判断两个字符串通过旋转之后是否相同(两种方式:第一种方式:字符串拼接的方式进行的旋转 第二种方式:通过将字符串转换为字符数组方式进行的旋转)

需求:

image.png

代码演示:

public class AdjustString {
    public static void main(String[] args) {
        //定义两个字符串一个字符串通过旋转判断两个是否相等
        String strA = "abcde";
        String strB = "bcdea";

        boolean falg = judgment(strA, strB);
        if (falg){
            System.out.println("两个字符串通过旋转后相同");
        }else{
            System.out.println("两个字符串通过旋转后不相同");

        }
    }
    //第一种方式:字符串拼接的方式进行的旋转
    public static String revolve(String str){
        String start = str.substring(0, 1);
        String end = str.substring(1);
        return end+start;
    }
    //第二种方式:通过将字符串转换为字符数组方式进行的旋转
    public static String revolve2(String str){
        char[] arr = str.toCharArray();
        //获取字符数组为0索引的元素
        char first = arr[0];
        //通过循环把剩下的字符依次向前推近
        for (int i = 1; i < arr.length; i++) {
            arr[i-1]=arr[i];
        }
        //把原理索引为0的字符放到最后一个索引位置
        arr[arr.length-1]=first;
        //利用字符数组创建一个新的字符串对象
        String result = new String(arr);
        return result;
    }
    //判断字符串是否相等
    public static boolean judgment(String strA,String strB){
        for (int i = 0; i < strA.length(); i++) {
            strA= revolve2(strA);
            if(strA.equals(strB)){
                return true;
            }
        }
        return false;
    }
}

三、键盘输入任意字符串进行打乱输出

代码:

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

public class StringDislocate {
    public static void main(String[] args) {
        //键盘输入任意字符串,打乱里面内容
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入任意的字符串:");
        String str = scanner.next();

        //把字符串转换为字符数组
        char[] chars = str.toCharArray();
        Random random = new Random();
        //从0索引开始,根一个随机索引进行位置交换
        for (int i = 0; i < chars.length; i++) {
           int index =random.nextInt(chars.length-1);
           char temp = chars[i];
           chars[i]=chars[index];
           chars[index]=temp;
        }
        //把字符数组再次变回字符串
        String result = new String(chars);
        System.out.println(result);
    }
}

四、验证码(数字位置不在固定为最后一位)

代码:

import java.util.Random;

public class Captcha {
    public static void main(String[] args) {
        //定义一个方法随机产生一个5位数的验证码
        //格式为: 长度为5 大写字母或者小写字母跟数字位置随机生成

        char[] chars = new char[52];
        for (int i = 0; i < chars.length; i++) {
            //ASCII码表
            if (i <= 25) {
                //添加小写字母
                chars[i] = (char) (97 + i);
            } else {
                //添加大写字母
                chars[i] = (char) (65 + i - 26);
            }
        }
        //定义一个字符串来记录最后的结果
        String result = "";
        //随机抽取4次数组中的索引
        Random random = new Random();
        for (int i = 0; i < 4; i++) {
            int randomIndex = random.nextInt(chars.length);
            result = result + chars[randomIndex];
        }
        //随机生成一个0~9的数字
        int number = random.nextInt(10);
        result += number;

        //把字符串转换为字符数组
        char[] ch = result.toCharArray();
        //从0索引开始,根一个随机索引进行位置交换
        for (int i = 0; i < ch.length; i++) {
            int index =random.nextInt(ch.length-1);
            char temp = ch[i];
            ch[i]=ch[index];
            ch[index]=temp;
        }
        //把字符数组再次变回字符串
        String result1 = new String(ch);
        System.out.println("验证码:" + result1);
    }
}

五、通过输入字符串数字进行相乘计算打印的结果依旧为字符串格式

代码:

import java.util.Scanner;

public class StringMultiply {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入第一个非负数的数字:");
        String num1 = scanner.next();
        System.out.println("请输入第二个非负数的数字:");
        String num2 = scanner.next();

        int result = conversion(num1)*conversion(num2);
        String str = """ +result + """;
        System.out.println(str);
    }
    //把字符串变为字符数组在转换为数字相乘
    public static int conversion(String num){
        int result = 0;
        char[] chars = num.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char aChar = chars[i];
            int ge = aChar - 48;
            result=(result*10)+ge;
        }
        return result;
    }
}

六、通过输入字符串中间用空格隔开打印最后输入的字母并计算长度

需求:

image.png

代码:

import java.util.Scanner;

public class EndWord {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个字符串每个单词之间用空格隔开:");
        String str = scanner.nextLine();
        char[] chars = str.toCharArray();
        int count = -1;
        String result = "";
        for (int i = chars.length-1; i > 0; i--) {
            char c = chars[i];
            result=c+result;
            count++;
            if(chars[i]==' '){
              break;
            }
        }
        System.out.println("最后一个单词是:"+result+"长度为:"+count);
    }
}