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