Problema Java conversión

perez_chuck

Buenas,

el caso es que quiero convertir una palabra a entero, para poder meter este como String a un BigInteger.

Luego desde otro BigInteger, quiero recuperar la palabra, es decir pasarla a String.

No sé si me he explicado bien.

Igual me estoy liando demasiado y es una tontería, pero me estoy volviendo loco xD

public static String toDecimal(String s){
		String n="";
		for(int i=0;i<s.length();i++){
			n=n+(int)s.charAt(i);			
		}
		return n;
	}

public static String toTexto(BigInteger b){
		String s=b.toString();
		int t=Integer.parseInt(s);
		//TODO convertir cada valor ascii de t a caracter
		return s;
	}

VipeR_CS

¿Una palabra a entero? No estoy seguro de que se pueda hacer eso directamente, salvo que por palabra te refieras a un "string numérico", vamos una cadena que contiene números.

Hablo casi desde el desconocimiento en Java, pero vamos, que no me suena a mí demasiado factible al menos de forma fácil.

Edit: vale, viendo el código que has puesto veo que lo haces de la única forma que se me ocurría, con el valor ascii de cada letra.

Edit2: En el método toTexto no te sirve hacer un toString simplemente a todo el bigint, porque simplemente te hará una cadena numérica. Cada letra estará representada en ese string por un número de 2 cifras, así que podrías hacer lo siguiente: una vez que tienes el int con todos los numeros seguidos, vas cogiéndolos de 2 en 2 con un substr o como coño se haga en Java (quizá tengas que pasar la cadena de todos los enteros a string, cortarla y luego volver a pasar a int cada trocito), y luego conviertes ese valor de 2 dígitos a su letra equivalente con String.ValueOf(int). Luego es sólo cuestión de concatenar todas las letras resultantes.

1 respuesta
perez_chuck

#2 al hacer el toString, me devuelve el valor numérico que corresponde con la concatenación de cada carácter, es decir: hola = 10411110897
El problema de separarlos de 2 en 2, es que hay letras que tienen 3 cifras.
Gracias!

1 respuesta
VipeR_CS

#3 Todas las letras mayúsculas tienen un valor ascii de 2 dígitos. Pásalo todo a mayúsculas antes de pasar la palabra a entero y solucionado. Excepto por las vocales con tilde, que seguramente te den por saco.

2 respuestas
perez_chuck

#4 Hostia, cierto, voy a ver... lo de las tildes da igual porque no las voy a usar.

perez_chuck

#4 Solucionado, muchas gracias tío. No era complicado, pero tanto tiempo aquí pensando se vuelve uno loco xd. Aquí dejo la solución:

public static String toDecimal(String s){
		String n="";
		s=s.toUpperCase();
		for(int i=0;i<s.length();i++){
			n=n+(int)s.charAt(i);			
		}
		return n;
	}
	
public static String toTexto(BigInteger b){
	String s=b.toString();
	String texto="";
	String c;
	int n;
	for(int i=0;i<s.length();i=i+2){			
		c=(s.substring(i,i+2));
		n=Integer.parseInt(c);
		texto=texto+(char)n;
	}		
	return texto.toLowerCase();
}

Usuarios habituales

  • perez_chuck
  • VipeR_CS