[RESOLVIDO] Dúvida Strings

9 respostas
J

Alguém aí poderia me ajudar com uma lógica? Tipo quero retirar de uma String todos os elementos que estão entre chaves, tipo:

“HOJE NÃO SAIU {SOL}, NÃO TEM VISITA NÃO TEM {FUTEBOL}”

Quero tirar da String o {SOL} e o {FUTEBOL}

9 Respostas

T

a) Você pode usar indexOf para achar o “{” e o “}”
b) Você pode usar expressões regulares e o método “replaceAll” da classe java.lang.String.

J

Cara sei que com RegEx da pra fazer, mas naum manjo nada de regex… :frowning:

T

Então use indexOf, ou leia algo sobre regex:

http://aurelio.net/er

lina

Oi,

Vou facilitar um pouco, é muito complicado usar indexOf. Segue 2 maneiras.:

Utilizando indexOf

String
ls_word = "HOJE NÃO SAIU {SOL}, NÃO TEM VISITA NÃO TEM {FUTEBOL}";

int
ln_start_index = 0,	 
ln_end_ocurrence = 1,
ln_start_ocurrence = 1;  // Se for procurar a palavra Futebol, esse start tem que ser '2'.
	  
for (int i = 0; i<ln_start_ocurrence; i++) {
	  
	ln_start_index = ls_word.indexOf("{", ln_start_index);
	ln_start_index += ln_start_index < 0 ? 0 : "{".length();
}
	  
int
ln_end_index = ln_start_index;
	  
ln_end_index = ls_word.indexOf("}", ln_end_index);
ln_end_index +=	--ln_end_ocurrence == 0	? 0 : ln_end_index < 0 ? 0 : "}".length();
	 
String
ls_result = ln_start_index == -1 ? "" : ls_word.substring(ln_start_index, ln_end_index);
	  
System.out.println(ls_result);

Maneira + simples (Força bruta):

char
lc;
	  
String
receive = "";
	  
String
ls_word = "HOJE NÃO SAIU {SOL}, NÃO TEM VISITA NÃO TEM {FUTEBOL}";
	  
for (int i=0; i<ls_word.trim().length(); i++) {

	lc = ls_word.charAt(i);
		  
	if (lc == '{') {
		i++;
		
		while (ls_word.charAt(i) != '}') {
				 
			lc = ls_word.charAt(i);
			receive	+=	lc;
			 i++;
		}
		receive	+=	"@";			  
	}
}
	  
String[]
ls_receive = receive.split("@");
System.out.println(ls_receive[0]);
System.out.println(ls_receive[1]);

thingol,
será que tem uma maneira + facil com indexOf? Vou implementar um método desses na minha classe String.

Tchauzin!

T

Eu sou especialmente preguiçoso e costumo usar expressões regulares e replaceAll:

String s = "HOJE NÃO SAIU {SOL}, NÃO TEM VISITA NÃO TEM {FUTEBOL}".replaceAll ("{.+}", "");

Entretanto, o seu primeiro programa (que usa a variação de indexOf que usa um segundo parâmetro) está tolerável. Veja como é que o Velocity (que usa uma sintaxe semelhante a essa) lida com isso.

lina

thingol:
Eu sou especialmente preguiçoso e costumo usar expressões regulares e replaceAll:

String s = "HOJE NÃO SAIU {SOL}, NÃO TEM VISITA NÃO TEM {FUTEBOL}".replaceAll ("{.+}", "");

Entretanto, o seu primeiro programa (que usa a variação de indexOf que usa um segundo parâmetro) está tolerável. Veja como é que o Velocity (que usa uma sintaxe semelhante a essa) lida com isso.

Oi,

Também costumo utilizar expressões e replace, inclusive tentei esse replaceAll (antes de fazer o indexOf). Pena que não funciona =/

Tchauzin!

T

Ah, desculpe, a expressão regular correta é:

s = "HOJE NÃO SAIU {SOL}, NÃO TEM VISITA NÃO TEM {FUTEBOL}".replaceAll ("\{[^}]+\}", "");

Como sempre, as coisas costumam ser mais complicadas que o esperado.

lina

Oi,

poisé! sempre me esqueco do caracter ‘^’ rsrs

Agora que eu li direito o primeiro post! ele quer retirar e não pegar o conteudo! =P

Tchauzin!

J

Valeu thingol e lina, 100% esclarecido… :smiley:

Criado 17 de agosto de 2009
Ultima resposta 17 de ago. de 2009
Respostas 9
Participantes 3