文档章节

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

K不是你的帝
 K不是你的帝
发布于 2014/05/10 13:00
字数 732
阅读 799
收藏 0

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

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<temp.length;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<t> list=new ArrayList<t>();//声明一个容器来存储这些对象
  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<list.size();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<hell> list=new ArrayList<hell>();//声明一个容器来存储这些对象
  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<list.size();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);//输出转换后的值
 }

}

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

© 著作权归作者所有

K不是你的帝
粉丝 8
博文 5
码字总数 1635
作品 0
朝阳
私信 提问
LeetCode:Roman to Integer - 罗马数字到阿拉伯数字的转换

1、题目名称 Roman to Integer (罗马数字到阿拉伯数字的转换) 2、题目地址 https://leetcode.com/problems/roman-to-integer/ 3、题目内容 英文:Given a roman numeral, convert it to an...

北风其凉
2015/08/04
1K
0
数字转中文

正在用java写一个阿拉伯数字转中文大写的算法,现遇到一个小学级别的疑惑,比如1009463,读作一百万零九千四百六十三还是一百万九千四百六十三? http://link.fobshanghai.com/rmb.htm 此人民...

银杏果果
2017/09/06
284
3
运用 Java 8 写一个 通用 Map 转换工具类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangxin09/article/details/86670936 Map 是非常常见的一个数据结构,至于多常见则不再赘说了。框架无论大小...

sp42a
01/28
0
0
java 中 16 进制 HEX 转换成字节码形式的 UTF-8

恩,又碰到个蛋疼的编码转换问题了:要把形如 xE9xBB 的字符串转成中文。。。 在python中我们直接 print "xE9xBBx84" 即可, 在shell中我们直接 echo $'xe9xbbx84' #echo -e 'xe9xbbx84'也行......

大数据之路
2013/02/01
7K
1
java Byte和各数据类型(short,int,long,float,double)之间的转换

在Java的网络编程中传输的经常是byte数组,但我们实际中使用的数据类型可能是任一种数据类型,这就需要在它们之间相互转换,转换的核心在于将其他类型的数据的每一位转换成byte类型的数据。下...

phacks
2015/01/23
899
0

没有更多内容

加载失败,请刷新页面

加载更多

只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
59
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
28
0
全世界到底有多少软件开发人员?

埃文斯数据公司(Evans Data Corporation) 2019 最新的统计数据(原文)显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640万,到 2023 年达到 2770万。 而来自...

红薯
昨天
65
0
Go 语言基础—— 通道(channel)

通过通信来共享内存(Java是通过共享内存来通信的) 定义 func service() string {time.Sleep(time.Millisecond * 50)return "Done"}func AsyncService() chan string {retCh := mak......

刘一草
昨天
58
0
Apache Flink 零基础入门(一):基础概念解析

Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速...

Vincent-Duan
昨天
60
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部