partido de estilo funcional java.util.regex extracción / grupo

tkruse:

Usando java.util.regex a subseries extracto Me encuentro implementar el mismo patrón de código de trabajo en torno a las llamadas:

Pattern p = Pattern.compile(pattern); // can be static final
Matcher m = p.matcher(input);
if (m.find()) { // or m.matches()
    foo(m.group(x));
} else {
    ...
}

¿Hay una extensión funcional o Biblioteca Popular (guayaba / Apache Commons) que evita la variable local innecesaria y propenso a errores feos, como:

Pattern p = Pattern.compile(pattern); // can be static final
p.matchedGroup(input, x) // return Optional<String>
    .map(group -> foo(group))
    .orElse(...);

y también una corriente de coincidencia resultados como:

Pattern p = Pattern.compile(pattern);
p.findMatches(input)
    .map((MatchResult mr) -> {
        mr.groupsIfPresent(x).map(g -> foo(g)).orElse(...)
    })
    .findFirst();

Parece que la única adición funcional en Java8 era .splitAsStream()pero eso sólo ayuda cuando se trata de dividir en torno partidos.

Yassin Hajaj:

A continuación sólo está disponible de

Probablemente se esté buscando Matcher::resultslo que produce unaStream<MatchResult>

Se puede utilizar de la siguiente manera, por ejemplo,

p.matcher(input)
 .results()
 .map(MatchResult::group)
 .findAny()
 .orElse(null);

Una adición añadida por Holger y que está interesante lo que sería, al leer una Filey en busca de un patrón a utilizar directamente Scanner::findAllpara evitar cargar todo el archivo en la memoria usandoFile::lines

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=167562&siteId=1
Recomendado
Clasificación