Como parte de um projeto para a escola, preciso substituir uma sequência do formulário:
5 * x^3 - 6 * x^1 + 1
para algo como:
5x<sup>3</sup> - 6x<sup>1</sup> + 1
Acredito que isso possa ser feito com expressões regulares, mas ainda não sei como fazê-lo.
Você pode me ajudar?
PS: A atribuição real é implementar um aplicativo Java de Polynomial Processing, e estou usando isso para passar polynomial.toString () do modelo para a visualização, e quero exibi-lo usando tags html de uma maneira bonita.
Respostas:
fonte
fonte
replaceAll
método implica implicitamentePattern.compile(regex).matcher(testString).replaceAll(regexReplacementString)
! Portanto, se você reutilizar o padrão dessa maneira, objetos redundantes serão evitados. Além disso, como diz @MarcelValdezOrozco, torná-lo estático impedirá invocações desnecessárias de compilação de padrões. :)fonte
fonte
observe que unir as duas substituições em uma única regex / substituição seria uma péssima escolha, pois expressões mais gerais, como
x^3 - 6 * x
falhariam.fonte
Se isso for para qualquer expressão matemática geral e expressões entre parênteses forem permitidas, será muito difícil (talvez impossível) fazer isso com expressões regulares.
Se as únicas substituições são as que você mostrou, não é tão difícil de fazer. Primeiro
*
tire as roupas e depois use como Can Berk Güder mostrou para lidar com as roupas^
.fonte
Qual é o seu polinômio? Se você está "processando", estou imaginando algum tipo de árvore de sub-expressão sendo gerada em algum momento e pensaria que seria muito mais simples usar isso para gerar sua string do que analisar novamente a matéria-prima expressão com um regex.
Apenas lançando uma maneira diferente de pensar lá fora. Não tenho certeza do que mais está acontecendo no seu aplicativo.
fonte
Tente o seguinte:
Certifique-se de importar o java.util.regex.
fonte
fonte
Você deseja analisar a captura em regex para manipular a quebra de 3 em ^ 3.
fonte
Tente isso, pode não ser o melhor caminho. mas funciona
fonte
Dê uma olhada no antlr4. Isso o levará muito mais longe na criação de uma estrutura em árvore do que apenas expressões regulares.
https://github.com/antlr/grammars-v4/tree/master/calculator (calculator.g4 contém a gramática necessária)
Em poucas palavras, você define a gramática para analisar uma expressão, usa o antlr para gerar código java e adiciona retornos de chamada para lidar com a avaliação quando a árvore está sendo construída.
fonte