Primero, evalúa si el dígito es una letra. Si es así, evalúa si es minúscula o mayúscula. Si es minúscula se empezará a contar desde 1 y si es minúscula desde 27. Si no es una letra, el código será 10.
public class Digits {
private final static char LOWER_CASE_START_LETTER = 'a';
private final static int LOWER_CASE_START_CODE = 1;
private final static char UPPER_CASE_START_LETTER = 'A';
private final static int UPPER_CASE_START_CODE = 27;
public static Integer getCodeOf
(char digit
) { char startLetter
= (Character.
isLowerCase(digit
)) ? LOWER_CASE_START_LETTER
: UPPER_CASE_START_LETTER
; code = getLetterCode(startLetter, digit, LOWER_CASE_START_CODE);
else
code = getLetterCode(startLetter, digit, UPPER_CASE_START_CODE);
} else { code = 10; }
return code;
}
private static int getLetterCode(char startLetter, char digit, final int START_CODE) {
if(startLetter == digit)
code = START_CODE;
else
code = START_CODE + getGapBetweenLetters(digit, startLetter);
return code;
}
private static int getGapBetweenLetters(char first, char second) {
return first - second;
}
}
Hagamos alguna prueba:
public class Test {
public static void main
(String[] args
) { String word
= "Hello world%".
replaceAll(" ",
""); char[] wordLetters = word.toCharArray();
int sum = 0;
for(byte i=0; i<wordLetters.length; i++)
sum += Digits.getCodeOf(wordLetters[i]);
System.
out.
println("La suma es: "+sum
); }
}
Resultado de la ejecución:
Helloworld%
La suma es: 160
Comprobemos:
H = 34
e = 5
l = 12
l = 12
o = 15
w = 23
o = 15
r = 18
l = 12
d = 4
% = 10
Suma de códigos: 160