java 罗马数字_JAVA,罗马数字与阿拉伯数字的互转

本人逛贴吧时候遇到某人求助,于是帮他实现了一下。下面是阿拉伯转罗马的数字。

import java.util.ArrayList;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class TOroma {

private int alab;

TOroma(int alab){

this.alab=alab;

}

public void zhuanhuan(){

String str="";

String x="";//用来存储最终的结果

String tp=String.valueOf(alab);//转换为String,方便匹配

char temp[]=tp.toCharArray();//将String转换为数字,方便把每个数字取出然后获得它的大小方便匹配。

//开始获取大小

for(int i=0;i

int s=(int)((temp[i]-48)*Math.pow(10, temp.length-i-1));

str+=s;

}

String regex=null;

String s="'',0,I,1,II,2,III,3,IV,4,V,5,VI,6,VII,7,VIII,8,IX,9,X,10,XX,20,XXX,30,XL,40,L,50,LX,60,LXX,70,LXXX,80,XC,90,C,100,CC,200,CCC,300,CD,400,D,500,DC,600,DCC,700,DCCC,800,CM,900,M,1000,MM,2000";

String c[]=s.split(",");//将字符串打散,方便存入到list中去

Pattern p;//正则

ArrayList list=new ArrayList();//声明一个容器来存储这些对象

for(int t=c.length-2;t>0;t=t-2){

t m=new t(c[t],Integer.parseInt(c[t+1]));

list.add(m);

}

//遍历循环,正则匹配

for(int i=0;i

int _alab=list.get(i).getAlab();

regex="^("+_alab+")";

p=Pattern.compile(regex);

Matcher matcher=p.matcher(str);

if(matcher.find()){

x+=list.get(i).getRoma();

str=str.substring(String.valueOf(list.get(i).getAlab()).length());

}

}

System.out.println(tp+"----------"+x);//输出转换后的值,这里就是结果。

}

//下面开始测试:

public static void main(String[] args) {

TOroma t=new TOroma(567);//这里我只写到了2000,所以,能求的值必须是2000以下,

t.zhuanhuan();

}

}

class t{

private String roma;

private int alab;

public t(String roma,int alab){

this.roma=roma;

this.alab=alab;

}

public String getRoma() {

return roma;

}

public void setRoma(String roma) {

this.roma = roma;

}

public int getAlab() {

return alab;

}

public void setAlab(int alab) {

this.alab = alab;

}

}

罗马转阿拉伯

import java.util.ArrayList;

import java.util.regex.*;

//定义一个类,用来存储一个阿拉伯数字所对应的罗马字母

public class hell {

private String roma;

private int alab;

hell(String roma,int alab){

this.roma=roma;

this.alab=alab;

}

public static void main(String[] args) {

//  public void alab_TO_roma(String roma){

//   return ;

//  }

int num=0;

String str="DLXVII";//测试用的数据,你也可以自己写一个分类

String regex=null;

String s="'',0,I,1,II,2,III,3,IV,4,V,5,VI,6,VII,7,VIII,8,IX,9,X,10,XX,20,XXX,30,XL,40,L,50,LX,60,LXX,70,LXXX,80,XC,90,C,100,CC,200,CCC,300,CD,400,D,500,DC,600,DCC,700,DCCC,800,CM,900,M,1000,MM,2000";

String c[]=s.split(",");//将字符串打散,方便存入到list中去

Pattern p;//正则

ArrayList list=new ArrayList();//声明一个容器来存储这些对象

for(int t=c.length-2;t>0;t=t-2){

hell m=new hell(c[t],Integer.parseInt(c[t+1]));

list.add(m);

}

//遍历循环,正则匹配

for(int i=0;i

int _alab=list.get(i).alab;

String _roma=list.get(i).roma;

regex="^("+_roma+")";

p=Pattern.compile(regex,Pattern.CASE_INSENSITIVE);

Matcher matcher=p.matcher(str);

if(matcher.find()){

num+=_alab;

str=str.substring(_roma.length());

}

}

System.out.println(num);//输出转换后的值

}

}

第二个就写的没有那么规范了,因为快下班了,嘿嘿。。不过功能还是实现了的。//*对于变量名勿喷。。。*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用以下代码将数字转换为罗马数字: ```java public class RomanNumeralUtil { private static final int MIN_VALUE = 1; private static final int MAX_VALUE = 5999; private static final String\[\] RN_M = {"", "M", "MM", "MMM", "MMMM", "MMMMM"}; private static final String\[\] RN_C = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}; private static final String\[\] RN_X = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"}; private static final String\[\] RN_I = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"}; public static String generate(int number) { if (number < MIN_VALUE || number > MAX_VALUE) { throw new IllegalArgumentException( String.format("The number must be in the range \[%d, %d\]", MIN_VALUE, MAX_VALUE)); } return RN_M\[number / 1000\] + RN_C\[number % 1000 / 100\] + RN_X\[number % 100 / 10\] + RN_I\[number % 10\]; } } ``` 这个代码定义了一个`RomanNumeralUtil`类,其中的`generate`方法接受一个整数作为参数,并返回对应的罗马数字。该方法首先检查输入的数字是否在指定范围内,然后根据数字的千位、百位、十位和个位分别从对应的数组中获取罗马数字的表示,最后将它们拼接起来返回。 你可以使用`RomanNumeralUtil.generate(number)`来将一个整数`number`转换为罗马数字。 #### 引用[.reference_title] - *1* *3* [Java编程练习之:转换罗马数字](https://blog.csdn.net/qq_42902997/article/details/105644548)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [JAVA:实现将数字转换为罗马数字系统算法(附完整源码)](https://blog.csdn.net/it_xiangqiang/article/details/126291444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值