Il problema più grande è che la stringa non ha un pattern regolare:
1) la prima informazione (balconi) è separata dai suoi valori tramite il carattere "due-punti", mentre lo stesso pattern non si vede nel resto delle informazioni (cucina e ingresso non sono separati dai rispettivi valori tramite i due punti).
2) Il carattere "x" che tu interpreti come "simbolo di moltiplicazione" e il simbolo "+" sono essi stessi caratteri alfabetici (quindi di per sé è un separatore tra parte alfabetica e parte numerica).
Se il tuo obiettivo è semplicemente separare i valori numerici dal resto (e non te ne frega molto del resto), allora puoi procedere in questo modo:
codice:
String miaStringa = "balconi:4,5x3,5+6x2,4cucina 4,5x4,8ingresso 1,5x6";
Pattern p = Pattern.compile("(\\d+,{0,1}\\d*)");
Matcher m = p.matcher( miaStringa );
String stringaSeparata = m.replaceAll("|$1|");
System.out.println( stringaSeparata );
Ovviamente, la "x" (che viene usata come simbolo di moltiplicazione) e il "+" verranno separati dai numeri. Il precedente snippet di codice produce questo risultato:
codice:
balconi:|4,5|x|3,5|+|6|x|2,4|cucina |4,5|x|4,8|ingresso |1,5|x|6|
Ciao.