罗马数字转换(Java字符串练习)

【题目描述】

键盘录入一个字符串

要求1:长度为小于等于9

要求2:只能是数字

将内容变成罗马数字

下面是阿拉伯数字跟罗马数字的对比关系:

I-1,II-2,III-3,IV-4,V-5,VI-6,VII-7,VIII-8,IX-9

注意点:

罗马数字里面没有0的

如果键盘录入的数字包含0,可以变成“ ”(长度为0的字符串)

【思路】

根据要求,逐步完成

  • 对键入的字符串进行判断,判断是否符合要求
  • 将符合要求的字符串进行转换,转化成罗马数字
  • 将转换完的罗马数字进行输出

【代码实现】

第一步,键盘录入字符串,并且将字符串进行判断,判断字符串是否符合只能是数字并且长度小于等于9的要求。如果没有满足要求,则需要重新输入并进行判断

        Scanner sc = new Scanner(System.in);String str;while (true) {str = sc.next();boolean flag = checkStr(str);if (flag) {break;} else {System.out.println("不符合规则,请重新输入");continue;}}

这里用了一个方法来检查输入的字符串是否符合要求,当字符串符合要求就会返回布尔型的true给flag,如果不符合要求就返回布尔型的false给flag,然后根据flag的值来进行判断。

注意while(true)这个结构主要就是让输入错误的字符串后不断要求引导输入,直到输入的字符串符合要求。引导重复输入的时候要注意把输入语句放到while(true)循环里面,否则就会出现输入字符串错误后不断提示“不符合规则,请重新输入”的情况。而str这个变量定义的时候要定义到while(true)外面,因为str不是while(true)的局部变量。str要在整个程序中发挥作用。

下面就是对字符串进行检查的一个方法,首先判断了字符串的长度是不是小于等于9,然后判断字字符串的中的每一个字符是否都是数字

    public static boolean checkStr(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;}

注意这里是进行的字符的比较注意字符0和9的ASCII编码是多少,如果忘了可以临时用字符‘0’和字符‘9’来表示。要当循环结束后才能判断是否是true,所有不满足条件的都已排除了,剩下的就是满足条件的,直接返回true

第二步,将符合要求的字符串拆分成一个个的字符,并将每个字符转化为相应的罗马数字,最后将这些罗马数字拼接成一个字符串

        StringBuilder sb = new StringBuilder();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);String s = changeluoma(c);sb.append(s);}

注意这里主要运用了stringBuilder来拼接字符串的,stringBuilder来拼接字符串比单纯的“+”的加号的拼接更加快速

    public static String changeluoma(char number) {String str;str = switch (number) {case '0' -> "";case '1' -> "I";case '2' -> "II";case '3' -> "III";case '4' -> "IV";case '5' -> "V";case '6' -> "VI";case '7' -> "VII";case '8' -> "VIII";case '9' -> "IX";default -> "";};return str;}

注意这里用的是switch语句来进行配对替换的。因为是将要注意进行替换的是字符,最后出来的是罗马数字(字符串),所以我们要将数字字符用单引号括起来,但是到了转化后要用双引号将罗马数字引起来,这里是直接进来的字符,出来的字符串,所以要返回一个字符串类型。这个是一个简洁的版本,因为都是赋值的操作,所以将str=统一放到了switch前面。下面是一个完整版的

    public static String changeluoma(char number) {String str;switch (number) {case '1' -> str = "I";case '2' -> str = "II";case '3' -> str = "III";case '4' -> str = "IV";case '5' -> str = "V";case '6' -> str = "VI";case '7' -> str = "VII";case '8' -> str = "VIII";case '9' -> str = "IX";default -> str = "";}return str;}

这里不仅可以switch语句进行替换,同样可以用查表法的方法来进行替换,下面来展示用查表法进行替换的过程

因为查表法主要运用的是数字作为数组的下标,所以相比switch语句的替换,我们多了一步就是将字符数字‘0’—‘9’转化为数字0—9,所以在Main方法里也要相应的发生变化

Main方法

        StringBuilder sb = new StringBuilder();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);int number = c - '0';String s = changeluoma(number);sb.append(s);}

changeluoma方法

    public static String changeluoma(int number) {String[] arr = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};return arr[number];}

这里用到的查表法进行替换在金额转换的里面已经讲解过了,这里不做讲解了

第三步,将结果出输出

 System.out.println(sb);

【总代码】

版本一(switch替换法)

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str;while (true) {str = sc.next();boolean flag = checkStr(str);if (flag) {break;} else {System.out.println("不符合规则,请重新输入");continue;}}StringBuilder sb = new StringBuilder();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);String s = changeluoma(c);sb.append(s);}System.out.println(sb);}public static String changeluoma(char number) {String str;str = switch (number) {case '0' -> "";case '1' -> "I";case '2' -> "II";case '3' -> "III";case '4' -> "IV";case '5' -> "V";case '6' -> "VI";case '7' -> "VII";case '8' -> "VIII";case '9' -> "IX";default -> "";};return str;}public static boolean checkStr(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;}
}

版本二(查表法)

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String str;while (true) {str = sc.next();boolean flag = checkStr(str);if (flag) {break;} else {System.out.println("不符合规则,请重新输入");continue;}}StringBuilder sb = new StringBuilder();for (int i = 0; i < str.length(); i++) {char c = str.charAt(i);int number = c - '0';String s = changeluoma(number);sb.append(s);}System.out.println(sb);}public static boolean checkStr(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 changeluoma(int number) {String[] arr = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};return arr[number];}
}

【效果展示】

罗马数字转换(Java字符串练习)相关推荐

  1. 罗马数字转换阿拉伯数字(Java版,考虑较为全面)

    一. 前言 朋友的作业,本想在网上找个现成的改改就行啦.可是一番google.baidu之后,找到的要么不是Java版本的,要么就是考虑的不够全面.遂,笔者自己写了个,如有考虑不全面的地方,望大家能够 ...

  2. 【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 )

    文章目录 I . C/C++ 中的 Java 字符串数组类型 II . 获取字符串数组长度 III . 获取字符串数组元素 IV . 类型强转 ( jobject -> jstring ) V ...

  3. java无符号 uuid,java实现无符号数转换、字符串补齐、md5、uuid、随机数示例

    package com.hongyuan.test; import java.security.messagedigest; import java.security.nosuchalgorithme ...

  4. java 字符串转成图片_java 转换图片为字符串,将字符串转换成图片显示

    java 转换图片为字符串,将字符串转换成图片显示, 该方法只适用于比较小的图片传输,50K以内: try{ // 将图片转换成字符串 File imgFile = new File("f: ...

  5. char数组转换成字符串_将字符串转换为char数组java –将字符串转换为char

    char数组转换成字符串 Sometimes we have to convert String to the character array in java programs or convert ...

  6. java 把ascll转换成char_java中 怎么把一个ascii转换成字符串

    java中 怎么把一个ascii转换成字符串 关注:275  答案:3  信息版本:手机版 电脑版 解决时间 2021-01-18 08:53 提问者壹玍徴戰何亽陪 2021-01-17 22:42 ...

  7. Java将16进制字符串,转换成字符串

    Java将16进制字符串,转换成字符串 前段时间遇到同事给了我一串16进制的字符串,让我把它给转成正常的字符串. 16进制字符串: c8:ed:cc:bd:d5:eb 转换后正常的字符串: 软探针 解 ...

  8. android 日期 转换成字符串,android JAVA字符串转日期或日期转字符串(转)

    用法: SimpleDateFormat sdf = new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " ); 这一行最重要,它确立了转换的 ...

  9. json对象,java对象,json字符串,java字符串转换方式,没写的自己去看源码!

    package com.sgai.property;import com.alibaba.druid.support.json.JSONUtils; import com.alibaba.fastjs ...

最新文章

  1. HDU1899 Sum the K-th's(树状数组)
  2. C/Cpp / const 用法
  3. Nginx负载均衡状态之down
  4. Highcharts 配置选项详细说明
  5. Oracle SQL中实现indexOf和lastIndexOf功能
  6. NeHe OpenGL教程 第三十七课:卡通映射
  7. redis -- 学习
  8. node进阶| 解决表单enctype=multipart/form-data 时获取不到Input值的问题
  9. c语言2048项目报告,c语言----项目_小游戏2048
  10. H3C CLI基础笔记(交换机,链路聚合-DHCP)
  11. 【路径规划】基于matlab粒子群优化蚁群算法最短路径规划【含Matlab源码 076期】
  12. 零起点学习Linux系列培训视频 [共61课] (万分感谢寒冰老师分享!)
  13. jszip打包下载文件
  14. 树莓派驱动数码管c 语言,用树莓派驱动八段数码管实现倒计时
  15. vue电商实战-黑马-01
  16. 第七周OJ—百位数的分解
  17. 自建ngrok服务支持https访问
  18. 在电脑上显示未知发布者怎么办_Win7无法验证发行者、未知发布者的解决方法...
  19. Windows查看ios手机日志
  20. 100行代码实现数字滚动抽奖功能

热门文章

  1. 计算机图形专业世界排名,2020 THE世界大学排名-美国电子电气工程专业
  2. k8s的健康性检查-Health Check
  3. 前后端联调和跨域处理
  4. nvidia_tx1开发笔记
  5. 普通中学生的心理特点
  6. 汇编语言程序设计DOSBox+MASM文件,解决汇编程序设计入门问题
  7. 智慧职教云Java题库_云课堂智慧职教java职业证书题库答案
  8. java数组length_Java数组属性 length属性,表示数组的长度
  9. 基于java的ssm和微信小程序实现物业缴费系统的设计与实现【附项目源码+论文说明】
  10. 基于语义分割和生成对抗网络的缺陷检测算法