Version java de : romanutils, tout pour convertir les chiffres romains vers les entiers et inversement

Soyez le premier à donner votre avis sur cette source.

Vue 16 330 fois - Téléchargée 339 fois

Description

Rapide portage de l'excellente source Delphi disponible à
http://www.delphifr.com/code.aspx?ID=34428

Source / Exemple :


public class RomanUtils 
{
	private final static String[] acceptedchar={"I","V","X","L","C","D","M"};
	
	private final static String[] _RRUTR = {"","I","II","III","IV","V","VI","VII","VIII","IX"};
	private final static String[] _RRDTR = {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
	private final static String[] _RRCTR = {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
	private final static String[] _RRMTR = {"","M","MM","MMM","","","","","",""};

	
	/**

  • Validate if the string entered is a right Roman number
  • @param val
  • @return true if ok
  • /
static boolean IsRomanNumber(String val) { boolean actuval; for (int i=0;i<val.length();i++) { actuval=false; for (int j=0;j<acceptedchar.length;j++) if (val.substring(i, i+1).equals(acceptedchar[j])) actuval=true; if (actuval==false) return false; } return true; } /**
  • Validate if the entered integer value is in the accepted limits
  • @param val
  • @return true if ok
  • /
static boolean IsRomanNumber(int val) { if ((val>0)&&(val<=39999)) return true; return false; } /**
  • return the value of a Roman figure
  • @param vv = The figure
  • @return The corresponding value
  • /
static int RomanCharToValue(char vv) { switch (vv) { case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; } return 0; } /**
  • Return the Roman number string corresponding to the value entered.
  • @param value to convert
  • @return String value
  • /
public static String IntToRoman(int i) { if (IsRomanNumber(i)) { if (i>=0 && i<=9) return _RRUTR[i]; if (i>=10 && i<=99) return _RRDTR[i / 10]+ _RRUTR[i % 10]; if (i>=100 && i<=999) return _RRCTR[i / 100]+ _RRDTR[(i / 10) % 10]+ _RRUTR[i % 10]; if (i>=1000 && i<=3999) return _RRMTR[i / 1000]+_RRCTR[(i / 100) % 10]+_RRDTR[(i / 10) % 10]+_RRUTR[i % 10]; }//endif return ""; } /**
  • Return the int value correspondif of a Roman String entered
  • @param value in roman figures
  • @return int value
  • /
public static int RomanToInt(String RN) { int oc,NewRV,OldRV=0,Result=0; if (IsRomanNumber(RN)) { for (oc=0;oc<RN.length();oc++) { NewRV = RomanCharToValue(RN.toCharArray()[oc]); if (NewRV > OldRV) { Result+=NewRV-(OldRV<<1); }else { Result+=NewRV; }//endif OldRV=NewRV; }//endfor }else return -1;//endif return Result; } }

Conclusion :


Je ne me suis pas amusé à faire des tests de performance...
De toutes façons, je doute qu'un jour ce soit utilisé dans des flux tendus.
Et si c'est le cas, le boulot est prémâché...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Merci gro
jndis Messages postés 1 Date d'inscription dimanche 6 septembre 2009 Statut Membre Dernière intervention 21 janvier 2012
21 janv. 2012 à 14:25
L'algorithme ne respecte pas les conventions de Notation romaine voir http://fr.wikipedia.org/wiki/Num%C3%A9ration_romaine

dans l'exemple VV donne 10 alors que cette notation est incorrecte

jndisanze
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
19 janv. 2008 à 10:43
Oh! translation 1:1 de ma source en Java (a 98% je peux pas verifier l'exactitude du code java)!
Mais bon boulot, traduire d'un langage a l'autre demande pas mal de competence l'exercice semble reussi ici, felicitation!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.