Spanish Extraer palabras de un String

mandias

Member
Hola, soy nuevo en esto de programar y tengo la siguiente duda, a ver si alguien me la puede resolver.

Tengo un label o un editText con un texto, por ejemplo: "Esto es un texto", y lo que quiero es extraer la primera y la tercera palabra.

¿Alguien podría decirme como puedo hacerlo?

Gracias de antemano ;)
 

cas6678

Active Member
Licensed User
Longtime User
Suponiendo que el texto esta en "TuString"

B4X:
PrimeraLetra=TuString.subString(0)

Ahora "PrimeraLetra" es un string que contiene la primera posicion del string "TuString"

Para extraer la tercer palabra yo lo haria asi:

Primero buscaria donde estan los espacios.

B4X:
PrimerEspacio=TuString.IndexOf(" ")
SegundoEspacio=TuString.IndexOf2(" ",PrimerEspacio)
TercerEspacio=TuString.IndexOf2(" ",SegundoEspacio)

Y ahora buscaria lo que hay entre los espacios segundo y tercero:

B4X:
TercerPalabra=TuString.Substring2(SegundoEspacio+1,TercerEspacio)


Ahora "TercerPalabra" es un string que contiene la tercera palabra

No se si hay algo mas facil, pero yo tengo una busqueda similar y la resuelvo asi. Tendras que ver que pasa para cuando el string no tiene los tres espacios o si la tercer palabra es la ultima, etc.
 

cas6678

Active Member
Licensed User
Longtime User
Siento el error, veo ahora que no querias la primera letra sino la primer palabra pero es parecido:

B4X:
PrimerPalabra=TuString.Substring2(0,PrimerEspacio)
 

inakigarm

Well-Known Member
Licensed User
Longtime User
Con
B4X:
Regex.Split
(mira el ejemplo) extraes las palabras a un String array (y después las puedes añadir a una lista si quieres, etc...)
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola mandias:

Si vienes del mundo de Visual Basic, hace tiempo hice un post en el cual emplear las misma intrucciones que VB para tratar cadenas, me creó en su dia algun comentario negativo :D , pero lo importante es ayudar.
Puedes copiar los sub en un modulo y hacer llamadas desde cualquier sitio, o bien ver como se hace cada cosa y emplearlas directamente.
Lo que pides lo puedes hacer facilmente con el MID

Puedes verlo aqui:
Hacer Left, Right, Mid y Split de Visual Basic en B4A (casi tutorial ;-) )
https://www.b4x.com/android/forum/t...t-de-visual-basic-en-b4a-casi-tutorial.33445/

Si quieres ver las funciones de cadena que emplea B4A lo puedes ver aqui:
https://www.b4x.com/android/forum/threads/string-functions.10365/


Saludos
 

mandias

Member
¡Muchisimas gracias! Solucionado.
Pero ahora tengo otra duda que me ha surgido relacionado con esto mismo.
Si lo que quisiese fuese buscar una palabra concreta dentro de la String... si no entendi mal IndexOf devuelve la primera coincidencia dentro de una String ¿no?

B4X:
MiString = "Esta es mi String con un texto"

BuscaPalabra = MiString.IndexOf("con")

¿Algo asi seria correcto?
 

cas6678

Active Member
Licensed User
Longtime User
No te devuelve la primera coincidencia sino la UBICACION de la primera coincidencia.

Si MiString="redondo"

y pones...

lugar=MiString.indexof("r") entonces lugar sera igual a 0

lugar=MiString.indexof("e") entonces lugar sera igual a 1

lugar=MiString.indexof("o") entonces lugar sera igual a 3, (la primera vez que la encuentra)

lugar=MiString.indexof("x") entonces lugar sera igual a -1 (no exsite)

En el ejemplo que tu pones ("con") te devolveria la posicion de la "c". Aunque yo no lo he usado con mas de un caracter, entiendo que sera asi.

No obstante al parecer con las otras dos respuestas que te han dado tambien se podria aislar una cadena determinada dentro de un string mas amplio, pero yo no lo controlo.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Como bien te ha dicho cas6678 te devuelve la primera coincidencia que encuentra y siempre empezando por 0 (cero), si lo que quieres es saber si existe la palabra a buscar, puedes emplear esto:

B4X:
if MiString.Contains("string a buscar") then  ' devuelve True si contiene el string a buscar y False si no

Saludos
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola mandias

¡Muchisimas gracias! Solucionado.

Ya que las dos preguntas se te solucionaron, podrias añadir [SOLUCIONADO] al título?, así haremos que funcione mejor el foro.

Gracias

Saludos
 
Top