Pessoal, eu sou novato em expressão regular e estou tendo algumas duvidas.
Nos metodos getData() e getLanguage() estou passando a mesma pagina HTML para eles para extrairem a data e a linguagem. O código em si é bem simples, e está funcionando, só que eu acredito que estou ocupando o mesmo espaço na memoria duas vezes, queria saber como posso fazer para passar todas as expressões que eu construir lendo apenas uma vez a minha pagina HTML, e não fazer um metodo toda vez que eu usar uma expressão, ae vai o codigo,
Valeu pessoal, :lol:
felixcomputer
public String getData(String cachedProjectPage)
{
try
{
Pattern expression = Pattern.compile("Registered : (.*?)\n");
Matcher matcher = expression.matcher(cachedProjectPage);
while ( matcher.find() )
return matcher.group(1);
}
catch(Exception e)
{
new Exception("Não pude extrair a data registrada");
}
return null;
}
public String getLanguage(cachedProjectPage)
{
try
{
Pattern expression = Pattern.compile("Programming Language :\n \s*<a href=(.*?)>(.*?)<");
Matcher matcher = expression.matcher(cachedProjectPage);
while ( matcher.find() )
return matcher.group(2);
}
catch(Exception e)
{
new Exception("Não pude extrair a Linguagem registrada");
}
return null;
}
Gostei muito da forma que vc escreveu, a minha forma estava meio desnecessária, contudo, acredito que ainda naum resolvi o meu problema, pq ainda assim eu estaria passando a cachedProjectPage para todos os metodos que eu fizesse, e acredito, naum tenho certeza, que a cada vez que eu passe a pagina como argumento, ele vai ocupar o mesmo espaço na memoria n vezes, sendo n, o numero de expressões, métodos, e são muitas, contudo eu queria uma forma de pesquisar as n expressões passando a pagina apenas uma vez, visto que a pagina sempre é a mesma, passar uma vez a cachedProjectPage e pesquisar todas as expressões como posso dizer “de uma vez”, mas ou menos, conseguiu me entender?
...
private static final String MY_REGEX =
"(?:Registered : (.*?)\n)|(?:Programming Language :\n \s*<a href=.*?>(.*?)<)"
;
...
public String[] getAllInfoIWant(String src, String regex){
ArrayList result = new ArrayList();
try
{
Pattern expression = Pattern.compile(regex);
Matcher matcher = expression.matcher(src);
while ( matcher.find() )
result.add(matcher.group(1));
return (String[])result.toArray(new String[0]);
}
catch(Exception e)
{
new Exception("Não pude extrair a informação");
}
return null;
}
...
A idéia do método acima é retornar um array de String com todas as ocorrências, indistintamente. Depois podemos pensar em alguma coisa pra diferenciar as posições do array…
Experimenta aí, e qq dúvida, de um toque
Em Java, todos os objetos são passados por referência, ou seja, você não copia todo ele pra memória, só copia o endereço dele e o método usa o mesmo objeto, e não a cópia dele. Até agora pouco tinha alguém perguntando sobre isso mesmo…
Mas enfim, ele não vai ocupar todo o espaço dele não, não se preocupe.