Try this way
String data = "aaaabbbaaaaab";
Matcher m = Pattern.compile("(?=(a+b+|b+a+))(^|(?<=a)b|(?<=b)a)").matcher(data);
while(m.find())
System.out.println(m.group(1));
This regex uses look around mechanisms and finds (a+b+|b+a+)that
- exists at
^input startup b, aa, b.
:
aaaabbb
bbbaaaaa
aaaaab
^ ?
, ^ aaaabbb, .
(^|(?<=a)b|(?<=b)a) (?=(a+b+|b+a+)),
aaaabbb
aaabbb
aabbb
abbb
bbbaaaaa
bbaaaaa
baaaaa
aaaaab
aaaab
aaab
aab
ab
, a, b ( b ), ) b, a.
a b, . , ^.
,
(?=(a+b+|b+a+))((?<=^|a)b|(?<=^|b)a).
(?<=^|a)b b, a(?<=^|b)a a, , b