罗马数字转换(Java字符串练习)
罗马数字转换(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字符串练习)相关推荐
- 罗马数字转换阿拉伯数字(Java版,考虑较为全面)
一. 前言 朋友的作业,本想在网上找个现成的改改就行啦.可是一番google.baidu之后,找到的要么不是Java版本的,要么就是考虑的不够全面.遂,笔者自己写了个,如有考虑不全面的地方,望大家能够 ...
- 【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 )
文章目录 I . C/C++ 中的 Java 字符串数组类型 II . 获取字符串数组长度 III . 获取字符串数组元素 IV . 类型强转 ( jobject -> jstring ) V ...
- java无符号 uuid,java实现无符号数转换、字符串补齐、md5、uuid、随机数示例
package com.hongyuan.test; import java.security.messagedigest; import java.security.nosuchalgorithme ...
- java 字符串转成图片_java 转换图片为字符串,将字符串转换成图片显示
java 转换图片为字符串,将字符串转换成图片显示, 该方法只适用于比较小的图片传输,50K以内: try{ // 将图片转换成字符串 File imgFile = new File("f: ...
- char数组转换成字符串_将字符串转换为char数组java –将字符串转换为char
char数组转换成字符串 Sometimes we have to convert String to the character array in java programs or convert ...
- java 把ascll转换成char_java中 怎么把一个ascii转换成字符串
java中 怎么把一个ascii转换成字符串 关注:275 答案:3 信息版本:手机版 电脑版 解决时间 2021-01-18 08:53 提问者壹玍徴戰何亽陪 2021-01-17 22:42 ...
- Java将16进制字符串,转换成字符串
Java将16进制字符串,转换成字符串 前段时间遇到同事给了我一串16进制的字符串,让我把它给转成正常的字符串. 16进制字符串: c8:ed:cc:bd:d5:eb 转换后正常的字符串: 软探针 解 ...
- android 日期 转换成字符串,android JAVA字符串转日期或日期转字符串(转)
用法: SimpleDateFormat sdf = new SimpleDateFormat( " yyyy-MM-dd HH:mm:ss " ); 这一行最重要,它确立了转换的 ...
- json对象,java对象,json字符串,java字符串转换方式,没写的自己去看源码!
package com.sgai.property;import com.alibaba.druid.support.json.JSONUtils; import com.alibaba.fastjs ...
最新文章
- HDU1899 Sum the K-th's(树状数组)
- C/Cpp / const 用法
- Nginx负载均衡状态之down
- Highcharts 配置选项详细说明
- Oracle SQL中实现indexOf和lastIndexOf功能
- NeHe OpenGL教程 第三十七课:卡通映射
- redis -- 学习
- node进阶| 解决表单enctype=multipart/form-data 时获取不到Input值的问题
- c语言2048项目报告,c语言----项目_小游戏2048
- H3C CLI基础笔记(交换机,链路聚合-DHCP)
- 【路径规划】基于matlab粒子群优化蚁群算法最短路径规划【含Matlab源码 076期】
- 零起点学习Linux系列培训视频 [共61课] (万分感谢寒冰老师分享!)
- jszip打包下载文件
- 树莓派驱动数码管c 语言,用树莓派驱动八段数码管实现倒计时
- vue电商实战-黑马-01
- 第七周OJ—百位数的分解
- 自建ngrok服务支持https访问
- 在电脑上显示未知发布者怎么办_Win7无法验证发行者、未知发布者的解决方法...
- Windows查看ios手机日志
- 100行代码实现数字滚动抽奖功能
热门文章
- 计算机图形专业世界排名,2020 THE世界大学排名-美国电子电气工程专业
- k8s的健康性检查-Health Check
- 前后端联调和跨域处理
- nvidia_tx1开发笔记
- 普通中学生的心理特点
- 汇编语言程序设计DOSBox+MASM文件,解决汇编程序设计入门问题
- 智慧职教云Java题库_云课堂智慧职教java职业证书题库答案
- java数组length_Java数组属性 length属性,表示数组的长度
- 基于java的ssm和微信小程序实现物业缴费系统的设计与实现【附项目源码+论文说明】
- 基于语义分割和生成对抗网络的缺陷检测算法