三个字符串综合练习

文章介绍了三个Java编程示例:1)用户输入字符串并转换为罗马数字;2)检查两个字符串是否可以通过旋转操作匹配;3)打乱键盘输入的任意字符串。涉及Scannersc、StringBuilder等工具的使用。
摘要由CSDN通过智能技术生成

案例一:

键盘录入一个字符串
要求1: 长度为小于等于9
要求2:只能是数字
将内容变成罗马数字
下面是阿拉伯数字跟罗马数字的对比关系
I-1、II -2、Ill-3、IV-4、V -5、VI-6、VII- 7、VIII-8、IX - 9
注意点:
罗马数字里面是没有0的
如果键盘录入的数字包含0,可以变成””(长度为0的字符串)
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要转换的数字: ");
        String input = sc.next();
        while (true) {  //死循环判断,仅当用户正确输入时退出
            if (containOtherCharacter(input) == true && lengthEstimate(input) == true) {
                break;
            } else {
                System.out.println("输入有误,请重新输入: ");
                input = sc.next();
            }
        }
        String[] dic = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < input.length(); i++) {
            int a = input.charAt(i) - 48;  //char对应转换为int时要先根据ASCII表,故应减去48
            stringBuilder.append(dic[a]);
        }
        //直接打印stringBuilder即可,无需再转换回String
        System.out.println("转换后的结果为: "+ stringBuilder);
    }
//判断是否包含非数字字符
    public static boolean containOtherCharacter(String s) {
        //定义一个flag变量,假定全为数字,不满足时候修改
        boolean flag = true;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) > '0' && s.charAt(i) < '9') {
            } else {
                flag = false;
            }
        }
        return flag;
    }
//判断长度是否超出9
    public static boolean lengthEstimate(String s) {
        if (s.length() > 9) {
            return false;
        } else {
            return true;
        }
    }

案例二:

调整字符串
给定两个字符串, A和B
A的旋转操作就是将A最左边的字符移动到最右边
例如,若A=abcde',在移动一次之后结果就是bcdea'
如果在若干次调整操作之后,A能变成B,那么返回True
如果不能匹配成功,则返回false
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个值: ");
        String value1 = sc.next();
        System.out.println("请输入第二个值: ");
        String value2 = sc.next();
        //为什么string是引用类型但是可以做备份?   
        //因为string是不可变对象,一旦创建,就固定,改变内容就是新建,原地址抹去,存入新的地址;
        String value1_bak = value1;
        while (true){
            String new_value1 = rotation(value1);
            if (value2.equals(new_value1)){
                System.out.println("true");
                break;
            }
            value1 = new_value1;
            //旋转完成一轮变回去时停止 返回没找到
            if (value1_bak.equals(value1)){
                System.out.println("false");
                break;
            }
        }
    }
//模拟旋转操作
    public static String rotation(String s) {
        StringBuilder stringBuilder = new StringBuilder();
        char c = s.charAt(0);
        String s_new = s.substring(1);
        stringBuilder.append(s_new).append(c);
        return stringBuilder.toString();
    }

案例三:

键盘输入任意字符串,打乱内容
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串: ");
        String s = sc.next();
        Random random = new Random();
        char[] s_char = new char[s.length()];
        //该循环用于将string存入char数组, 或者直接用tochararray方法
        for (int i = 0; i < s.length(); i++) {
            s_char[i] = s.charAt(i);
        }
        //该循环用于对数组打乱
        for (int i = 0; i < s_char.length; i++) {
            char s_bak = s_char[i];
            int r = random.nextInt(s_char.length);
            s_char[i] = s_char[r];
            s_char[r] = s_bak;
        }
        //该循环用于将打乱后的数组转会StringBuilder
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < s_char.length; i++) {
            stringBuilder.append(s_char[i]);
        }
        //输出
        System.out.println(stringBuilder);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值