Peleando con una String
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
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
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/
* 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/
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
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
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
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
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.
