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}
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}
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.
Cara sei que com RegEx da pra fazer, mas naum manjo nada de regex… 
Então use indexOf, ou leia algo sobre regex:
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!
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.
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!
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.
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!
Valeu thingol e lina, 100% esclarecido… 