本人逛贴吧时候遇到某人求助,因而帮他实现了一下。下面是阿拉伯转罗马的数字。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<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; } }
罗马转阿拉伯this
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);//输出转换后的值 } }
第二个就写的没有那么规范了,由于快下班了,嘿嘿。。不过功能仍是实现了的。//*对于变量名勿喷。。。*/code