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<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

相關文章
相關標籤/搜索