Tratando String

6 respostas
B

Oi pessoal,

vou dá um exemplo pra deixar mais claro minha dúvia:

Tenho uma String da seguinte forma

String teste = "${VAR_1} alguma coisa, bla bla bla ${VAR_2} ble ble ble";

E quero substituir as expressões ${VAR_1} e ${VAR_2} por valores, vamos supor que ${VAR_1} = 100 e ${VAR_2} = TESTE

a String ficaria da seguinte forma:

"100 alguma coisa, bla bla bla TESTE ble ble ble"

Será que alguem podia dar uma dica…

6 Respostas

Rafael_Steil

Ha varias formas… tudo vai depender da forma como voce guarda os dados… pode ser algo como

HashTable h = new HashTable();
h.put("${VAR_1}", "xxx");
h.put("${VAR_2}", "yyy");
h.put("${VAR_3}", "zzz");

String str = "${VAR_1} aaa sei la ${VAR_2} e o ${VAR_3}";

e entao fazer

Iterator iter = h.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry entry = (Map.Entry)iter.next();

    str = str.replaceAll(entry.getKey(), entry.getValue());
}

ou entao, qdo vc soh tem os indices ( 1, 2, 3 etc ), vc pode montar a variavel dinamicamente… algo como

// algum loop
...
String var = "${VAR_"+ indice +"}";

// faz o replace
...

fica mais facil de dar um exemplo melhor sabendo como vc armazena os dados ou como pretende fazer tal coisa…

Rafael

cv1

Ewww!

Pq nao usar o MessageFormat!? :(

String[] s1 = new String[] { "Mundo", "bobo" };
String[] s2 = new String[] { "GUJ", "o programador mais bobo do fórum" };

System.out.println(MessageFormat.format("Ola, {0}, eu sou {1}!", s1));
System.out.println(MessageFormat.format("Ola, {0}, eu sou {1}!", s2));

;) :D

Rafael_Steil

Tambem :mrgreen:

O MessageFormat se encaixa perfeito quando voce tem algum padrao que se encaixe no formato dele!

Rafael

B

Essa do MessageFormat foi uma dica muito boa, pois não conhecia, mas neste caso acho que ele não pode ser aplicado pois ele trata apenas com índices como por exemplo: {0} {1} … {n}, mas eu to tratando com nomes de variáveis como: {VAR_1} {VAR_2} …

O que to querendo fazer eh uma coisa parecida com o JasperReport só que mais simples, sem usar xml, onde passo um comando sql defino onde ficará as variáveis e obtenho uma consulta rapidinho em html mesmo, nesse caso as variáveis vem do resultset obtido da consulta.

B

Sim e o replaceAll dá o seguinte erro:

java.util.regex.PatternSyntaxException: Illegal repetition near index 0 ${teste1}
No caso de ter o seguinte código:

String teste = "${teste1}${teste2}${teste3}";
teste = teste.replaceAll("${teste1}", "");

Daí tentei colocar entre [] assim:

teste = teste.replaceAll("[${teste1}]", "");

Ai ele substituio tudo onde aparece qualquer um dos caracteres da expressão ${teste1}, obtendo o resultado:

23
cv1

Acho que usar replaceAll nesse caso eh uma pessima ideia. Ja tem um monte de template engines prontas implorando pra ser usadas. Fica mais rapido, mais facil de manter e mais seguro, tambem…

Minha recomendacao aqui eh dar uma olhada no Velocity: http://jakarta.apache.org/velocity :wink:

Criado 18 de novembro de 2003
Ultima resposta 19 de nov. de 2003
Respostas 6
Participantes 3