Это работает для образца строки, которую вы разместили:
String s = "578+223-5^2";
String[] tokens = s.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");
Регулярное выражение полностью состоит из взглядов и взглядов ; он соответствует позиции (не символ, а «пробел» между символами), которой либо предшествует цифра, а затем не цифра, либо предшествует не цифра, а затем цифра.
Имейте в виду, что регулярные выражения плохо подходят для задачи анализа математических выражений. В частности, регулярные выражения не могут легко обрабатывать сбалансированные разделители, такие как скобки, особенно если они могут быть вложенными. (У некоторых разновидностей регулярных выражений есть расширения, облегчающие подобные вещи, но не Java).
Помимо этого, вы захотите обработать строку, используя более приземленные методы, такие как charAt()
и substring()
и Integer.parseInt()
. Или, если это не учебное упражнение, используйте существующую библиотеку для анализа математических выражений.
РЕДАКТИРОВАТЬ: ... или eval()
это как @Syzygy рекомендует .