В рамках школьного проекта мне нужно заменить строку из формы:
5 * x^3 - 6 * x^1 + 1
примерно так:
5x<sup>3</sup> - 6x<sup>1</sup> + 1
Я считаю, что это можно сделать с помощью регулярных выражений, но пока не знаю, как это сделать.
Вы можете мне помочь?
PS Фактическое назначение состоит в том, чтобы реализовать Java-приложение для полиномиальной обработки, и я использую его для передачи polynomial.toString () из модели в представление, и я хочу отображать его с помощью тегов html в красивой форме.
Ответы:
источник
источник
replaceAll
метод неявно делаетPattern.compile(regex).matcher(testString).replaceAll(regexReplacementString)
! Таким образом, если вы повторно используете шаблон таким образом, можно будет избежать избыточных объектов. Кроме того, как говорит @MarcelValdezOrozco, сделав его статическим, вы предотвратите ненужные вызовы компиляции шаблона. :)источник
обратите внимание, что объединение обеих замен в одном регулярном выражении / замене было бы плохим выбором, потому что более общие выражения, такие как,
x^3 - 6 * x
не работают.источник
источник
Если это для какого-либо общего математического выражения и допускаются выражения в скобках, будет очень сложно (возможно, невозможно) сделать это с помощью регулярных выражений.
Если единственные замены - те, которые вы показали, это не так сложно сделать. Сначала
*
удалите 's, затем используйте захват, как показал Кан Берк Гюдер, чтобы справиться с^
' s.источник
Какой у вас многочлен? Если вы "обрабатываете" его, я представляю себе какое-то дерево подвыражений, генерируемых в какой-то момент, и думаю, что было бы намного проще использовать это для генерации вашей строки, чем повторно анализировать необработанные выражение с регулярным выражением.
Просто выбросить другой образ мышления. Я не уверен, что еще происходит в вашем приложении.
источник
Попробуй это:
Обязательно импортируйте java.util.regex.
источник
источник
Вы захотите изучить захват в регулярном выражении, чтобы обработать перенос 3 в ^ 3.
источник
Попробуйте это, может быть, это не лучший способ. но это работает
источник
Взгляните на antlr4. Это поможет вам продвинуться дальше в создании древовидной структуры, чем только регулярные выражения.
https://github.com/antlr/grammars-v4/tree/master/calculator (Calculator.g4 содержит нужную вам грамматику)
Вкратце, вы определяете грамматику для анализа выражения, используете antlr для генерации Java-кода и добавляете обратные вызовы для обработки оценки при построении дерева.
источник