怎么在字符串中将有意义的数字提取出来

如何在字符串中将有意义的数字提取出来
我用了如下方法
String a ="1*2*3*(7+8)*9*10*11"; 
     List<String> digitList = new ArrayList<String>();
     Pattern p = Pattern.compile("[^0-9]");
     Matcher m = p.matcher(a);
     String result = m.replaceAll("");
     for (int i = 0; i < result.length(); i++) {
     digitList.add(result.substring(i, i+1));

     }
     System.out.println(digitList);

结果是:[1, 2, 3, 7, 8, 9, 1, 0, 1, 1]
但我想要的结果是:[1,2,3,,7,8,9,10,11]
------解决方案--------------------
String a ="1*2*3*(7+8)*9*10*11"; 
     List<String> digitList = new ArrayList<String>();
     Pattern p = Pattern.compile("([0-9]+)");
     Matcher m = p.matcher(a);
     while(m.find()){
     digitList.add(m.group());
     }
     System.out.println(digitList);
------解决方案--------------------
按顺序将所有的字符入栈,然后出栈时,每个字符通过正则判断,是否是数字,
是的话,就是想要的,如果有连续的数字,则连接起来,诸如(11) 
待字符完全出栈,则拿到了楼主想要的结果
怎么在字符串中将有意义的数字提取出来 可能方案比较挫,欢迎大家探讨
------解决方案--------------------


public static void main(String[] args) {
String a = "1*2*3*(7+8)*9*10*11";
List<String> digitList = new ArrayList<String>();
StringTokenizer st = new StringTokenizer(a, "+-*/()");
while (st.hasMoreElements()) {
digitList.add(st.nextElement().toString());
}
System.out.println(digitList);
}

------解决方案--------------------
三楼正解

public static void main(String[] args) {
     String a ="1*2*3*(7+8)*9*10*11";
     //将所有非数字转换成@符号,然后将所有连续的@(@@)符转换成单个@
     a = a.replaceAll("\\D", "@").replaceAll("@+", "@");
    
        String[] strArr = a.split("@");
        for(String str:strArr){
         System.out.println(str);
        }
    }

------解决方案--------------------
如果你这个字符串都是这种表达式规律的, 用正则split一下就行

------解决方案--------------------

    String a = "1*2*3*(7+8)*9*10*11";
    a = a.replace("(", "").replace(")", "").replace("+", "*");
    List<String> list = new ArrayList<String>();
    String[] strs = a.split("\\*");
    for (String str : strs) {
      list.add(str);
    }
    System.out.println(list);