Como tokenizar essa string em java?

Como posso dividir essas expressões matemáticas simples em seqüências separadas?

Eu sei que basicamente quero usar a expressão regular:"[0-9]+|[*+-^()]" mas parece que String.split () não funcionará porque também consome os tokens de delimitador.

Quero que ele divida todos os números inteiros: 0-9 e todos os operadores * + - ^ ().

Assim,578+223-5^2

Será dividido em:

578  
+  
223  
-  
5  
^  
2  

Qual é a melhor abordagem para fazer isso?

questionAnswers(9)

yourAnswerToTheQuestion