W ramach projektu dla szkoły muszę zamienić ciąg znaków z formularza:
5 * x^3 - 6 * x^1 + 1
na coś takiego:
5x<sup>3</sup> - 6x<sup>1</sup> + 1
Uważam, że można to zrobić za pomocą wyrażeń regularnych, ale jeszcze nie wiem, jak to zrobić.
Czy możesz mi pomóc?
PS Rzeczywistym zadaniem jest zaimplementowanie aplikacji Java do przetwarzania wielomianowego i używam tego do przekazywania polynomial.toString () z modelu do widoku i chcę wyświetlić go za pomocą tagów HTML w ładny sposób.
Odpowiedzi:
źródło
źródło
replaceAll
metoda niejawnie działaPattern.compile(regex).matcher(testString).replaceAll(regexReplacementString)
! Jeśli więc ponownie użyjesz wzorca w ten sposób, unikniesz zbędnych obiektów. Ponadto, jak mówi @MarcelValdezOrozco, uczynienie go statycznym zapobiegnie niepotrzebnym wywołaniom kompilacji wzorców. :)źródło
źródło
zwróć uwagę, że połączenie obu zamian w jednym wyrażeniu regularnym / zamianie byłoby złym wyborem, ponieważ bardziej ogólne wyrażenia, takie jak
x^3 - 6 * x
zawiodłyby.źródło
Jeśli dotyczy to dowolnego ogólnego wyrażenia matematycznego, a wyrażenia w nawiasach są dozwolone, będzie to bardzo trudne (być może niemożliwe) przy użyciu wyrażeń regularnych.
Jeśli jedyne zamienniki to te, które pokazałeś, nie jest to trudne. Najpierw
*
pozbądź się, a potem użyj przechwytywania, jak pokazał Can Berk Güder, aby poradzić sobie z nimi^
.źródło
Jaki jest twój wielomian? Jeśli ją „przetwarzasz”, wyobrażam sobie, że w pewnym momencie zostanie wygenerowane jakieś drzewo wyrażeń podrzędnych i myślę, że byłoby o wiele łatwiej użyć tego do wygenerowania ciągu niż ponownie przeanalizować surowe wyrażenie z wyrażeniem regularnym.
Po prostu rzucam inny sposób myślenia. Nie wiem, co jeszcze dzieje się w Twojej aplikacji.
źródło
Spróbuj tego:
Pamiętaj, aby zaimportować plik java.util.regex.
źródło
źródło
Będziesz chciał przyjrzeć się przechwytywaniu w wyrażeniu regularnym, aby obsłużyć zawijanie 3 w ^ 3.
źródło
Spróbuj tego, może nie jest to najlepszy sposób. ale to działa
źródło
Spójrz na antlr4. Pozwoli ci to na dużo dalej w tworzeniu struktury drzewa niż same wyrażenia regularne.
https://github.com/antlr/grammars-v4/tree/master/calculator (kalkulator.g4 zawiera gramatykę, której potrzebujesz)
Krótko mówiąc, definiujesz gramatykę do analizowania wyrażenia, używasz antlr do generowania kodu java i dodajesz wywołania zwrotne do obsługi oceny podczas budowania drzewa.
źródło