Peleando con una String

Rookie
10 de Junio del 2004
Hola, soy nuevo en java y estroy tratando de hacer una cosa que para muchos será una tontería pero que a mi me está costando sudores ;) Es la siguiente:

Tengo una String muy larga (todo un código html) y lo que quiero hacer es coger parte de esa cadena.
Por ejemplo si la cadena es: ..<b>El precio es: 100</b> .. quiero coger e imprimir ese 100 ¿Cómo puedo hacerlo?

Muchísimas gracias

Jose Carlos
10 de Junio del 2004
Bueno bueno bueno... eso no es tan trivial como piensas, al menos desde el punto de vista que estas utilizando. Te comento:

* Si el código HTML que tienes en el string es siempre el mismo, quiero decir, si lo único que cambia son datos como el precio y demás, puedes leer en el string hasta ese punto (será la posición X) y a partir de ahí capturar lo que haya hasta el próximo "</b>" (posición Y)

* Si como supongo, el código HTML no va a ser siempre el mismo, la solucion es utilizar código XHTML en lugar de HTML y utilizar un parser de XML.

Para la "primera solucion" te recomiendo que veas los métodos

String#indexOf ( java.lang.String ) y
String#substring ( int, int )

disponibles en el API de Java en http://java.sun.com/j2se/1.3/docs/api/

Rookie_
10 de Junio del 2004
Gracias Jose Carlos, tienes razón es más complicado de lo que pienso. El código que tengo en el html es siempre el mismo así que la opción es:

String#indexOf ( java.lang.String ) y
String#substring ( int, int )

Pero al hacer lo siguiente (que no se si estará bien) me da un error del tipo "StringIndexOutOfBoundsException: String index out of range:-2"


//br es el BufferedReader que está leyendo el codigo html

String linea;
while ((linea = br.readLine()) != null)
{
String html = linea;
int pos1 = html.indexOf("b>$") + 3;
int pos2 = html.indexOf("<");
String resultado = html.substring(pos1, pos2);
System.out.println(resultado);
}

lo que quiero atrapar es de ...color="#AA0000"><b>$13.50</b>.... el 13.50
Que lío ...
Gracias otra vez

Jos?arlos
10 de Junio del 2004
Lo primero perdon por el retraso

Tu problema está en que estas leyendo todas las lineas así, y las que no tienen ese formato pueden dar cualquier error :) Ademas, en la segunda lectura que haces, estas obteniendo la posicion del primer caracter "<" en la linea, y esa posicion está antes que la posición que tienes almacenada en pos1. Tienes que decirle que busque el caracter "<" despues de pos1.

Haz lo siguiente:

// te aseguras de buscar esa cadena de caracteres
int pos1 = html.indexOf( "><b>$" );

// si la encuentra te devolvera un valor diferente de -1
if ( pos1 != -1 )
{
// le sumas 5 a ese valor, para ponerte en el principio
/// de lo que andas buscando
pos1 = pos1 + 5;

// buscas, a partir de ese punto, el final de la cadena
int pos2 = html.indexOf ( "</b>" , pos1 );

// si lo encuentra...
if ( pos2 != -1 )
{
// lo guardas en "resultado" y lo imprimes
String resultado = html.substring(pos1, pos2);
System.out.println(resultado);
}
}

Saludos

Rookie_
10 de Junio del 2004
GRACIAS!! me sale!! yujuuu !! ;)))

maramonar
10 de Junio del 2004
Tendrías que controlar que pos1 y pos2 sean mayores o iguales a 0, te estaría indicando que la cadena que buscas está dentro del string.

Lucas
10 de Junio del 2004
Si quieres partir un String por un token o conjunto de caracteres, mira StringTokenizer