Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > Obtener dato de un String

Buenas!

Se que lo que voy a preguntar no es muy difícil, pero estoy atascado y no doy con la clave...

Tengo un string que recibo a partir de un socket, lo que recibo es una trama parecida a estos dos ejemplos:

"0x00000000 10 02 01 02 02 0C 00 00 00 00 99 CF 00 01 ..End.02..."
"0x00000000 10 02 01 02 02 0C 00 00 00 00 99 CF 00 01 ..Coord..."

Por ejemplo, la cosa es que quiero extraer solo el Coord y el End 02. Se que puedo usar una función que busque el caracter C ó E, la pregunta es, como le digo que saque desde la E hasta el 2? Porque depende del dispositivo que emita información sera End 02, End 03...

Un Saludo y Muchas Gracias!!

agosto 4, 2013 | Unregistered CommenterDespotars

Lo que define lo que quieres buscar, ¿qué es? ¿Es una posición fija en la cadena? ¿Son las secuencias de puntos .. y ...? ¿Es, simplemente, que comienza por End o por Coord?

Lo primero sería con String.substring(int begin, int end);

Lo segundo podría ser con una expresión regular.

Lo tercero con String.indexOf("End") o String.indexO("Cood") y desde ahí ya coges el resto de la cadena que necesitas.

Respecto a la expresión regular, sería algo así (ojo, que no lo he probado, no uso expresiones regulares con regularidad, valga el chascarrillo): :-)


Pattern p = Pattern.compile("\.\.(.*)\.\.\."); // End, espacio, dígito, dígito
Matcher m = p.matcher(socketResult); // socketResult es la cadena recibida por el socket

if (m.matches()) {
String result = m.group();
}

agosto 4, 2013 | Registered Commenterrickiees

Buenas!! Gracias por tu respuesta. Lo que define mi busqueda no es posición, es solo esas letras "Coord" y "End 02" (el 02 puede ser otro numero) y necesito extrarer esa información.

agosto 5, 2013 | Unregistered CommenterDespotars

La cosa es que he usado esto que me comentas: String.indexO("End") pero me devuelve un numero, y yo necesito que me devuelva el nombre del dispositivo con el numero detrás. Es decir, de esas tramas necesito identificar el nombre de los dispositivos junto con el numero que les sigue, es decir End 02, End 06... no se si me entiendes?

agosto 5, 2013 | Unregistered CommenterDespotars

Sí, te entiendo, pero ¿no deberías esforzarte un poquito más tú? :-) Si ya tienes la posición donde comienza, aplica la misma técnica para identificar dónde acaba el identificador y extraerlo con substring().

La otra opción, que seguramente es más eficiente y profesional, es usar expresiones regulares, como te he comentado.

agosto 5, 2013 | Registered Commenterrickiees