Como le doy valores numericos a las letras asi:
a=1, b=2...z=26
A=27,B=28...
0=0,1=1....
Y a los demas valores el valor 10
Explica mejor lo que quieres hacer!
Teniendo un string
A cada letra (excepto la 'ñ') se le asocia un número entero: 'a'->1,'b'->2, ...,'z'->26, 'A'-27, 'B'->29, ...
A cada dígito se le asocia el valor entero correspondiente: '0'->0, '1'->1, ...
Al resto de caracteres se le asocia el valor entero 10
Bueno, ya es hora de que pienses un poco, ¿no crees?. Coloca lo que has avanzado para que te ayuden.
Tengo este codigo se podria hacer mejor?
for (int i=0; i<s.length();i++) {
char n1;
n1=s.charAt(i);
boolean x=false;
if(n1>'0' && n1<'9'){
suma+=Integer.parseInt(""+n1);
}else{
if((n1<'a' || n1>'z') && (n1<'A' || n1>'Z')){
suma+=10;
}else{
for(int j=0;x==false;){
char n2;
n2=letras.charAt(j);
if(n1!=n2){
j++;
}else{
x=true;
suma+=(j+1);
}
}
}
}
}
if(n1>='0' && n1<='9'){
Mayor o igual y menor o igual. El '0' y el '9' están incluidos.
No es necesario que tengas la cadena 'letras'. Basta restarle a la letra, si es minúscula, 'a'-1, y si es mayúscula, 'A'-1. Así obtendrás obtendrás el número de la letra sin más complicacioón:
char c = 'b';
int n = c-'a'+1; // n=2
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) {
Integer code = null;
if(Character.isLetter(digit)) {
char startLetter = (Character.isLowerCase(digit)) ? LOWER_CASE_START_LETTER : UPPER_CASE_START_LETTER;
if(Character.isLowerCase(startLetter))
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) {
Integer code = null;
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(" ","");
System.out.println(word);
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