Estou precisando fazer uma verificação usando expressões regulares utilizando variáveis no lugar das strings literais. Tentei da seguinte forma, mas está dando erro de compilação:
Stringvar1="Java";Stringvar2="Minha linguagem favorita é Java";Patternpadrao=Pattern.compile("*"+var1+"*");//pelomenosa"intenção"éverificarapalavraJavadentrodeumacadeiadecaracteres.Matcherpesquisa=padrao.matcher(var2);if(pesquisa.matches()){System.out.println("Achei a palavra 'Java' na sentença");}else{System.out.println("A palavra 'Java' não existe");}
Altere a linha onde vc informa a regex:Pattern padrao = Pattern.compile(var1);E altere a verificação: if (pesquisa.find())
Blz? Flw! :thumbup:
T
thingol
A sua expressão regular está errada - se você quer procurar a palavra Java, você tem de usar:
“.Java.”
. = qualquer caracter
= repetição do padrão anterior (no caso o “.”) zero ou mais vezes
Se a palavra contiver caracteres de expressões regulares, então ela deve ser “quoted”. Então na verdade você faria assim:
“.\Q" + palavra + "\E.”
\Q inicia uma seqüência que deve ser aceita literalmente, e \E termina essa seqüência.
V
von.juliano
thingol:
A sua expressão regular está errada - se você quer procurar a palavra Java, você tem de usar:
“.Java.”
. = qualquer caracter
= repetição do padrão anterior (no caso o “.”) zero ou mais vezes
Se a palavra contiver caracteres de expressões regulares, então ela deve ser “quoted”. Então na verdade você faria assim:
“.\Q" + palavra + "\E.”
\Q inicia uma seqüência que deve ser aceita literalmente, e \E termina essa seqüência.
No caso, como ele está procurando uma palavra fixa ao invés de um padrão, e por não levar em conta a quantidade de incidências, pode-se utilizar apenas “Java” com ER e ele vai obter o resultado positivo caso a palavra esteja lá, não é? Ou estou enganado?
M
mcrocha
Obrigado, funcionou blz! Mas está com um probleminha…
Eu preciso que o método encontre a palavra apenas se ela for completa:
Se
String palavra = “STU”;
e
Minha frase na outra variável for
String = “An Empirical STUDY of Communication in Code”,
a resposta deve ser FALSE, e ele está retornando TRUE por causa da palavra STUDY.
Como resolvo isto, por favor?
Valeu!
C
cassio
Para que a palavra seja “completa” ela precisa estar entre espaços, certo?
Se for isso que você considera como “palavra completa”, isso aqui resolveria:
“\s+STUDY\s+”
Um detalhe é que no caso do seu texto ter várias linhas, se a palavra que vc procura estiver no fim de uma linha, não haverá um espaço após a mesma, mas sim uma quebra de linha. Neste caso você precisa incluir este padrão também na expressão regular.
T
thingol
Existe o padrão “\b” que força essa verificação de palavras. É que nem sempre a palavra está cercada por espaços; ela pode ter um ponto ou uma vírgula depois, por exemplo.
Um exemplo:
publicclassTesteRE{/** * @param args */publicstaticvoidmain(String[]args){Stringtexto="Size this is o Size of test SizeOla";Stringreplaced=texto.replaceAll("\\bSize\\b","tamanho");System.err.println("REPLACED:"+replaced);}}