Brace expansion: Difference between revisions
Content added Content deleted
(→{{header|Kotlin}}: Updated example see https://github.com/dkandalov/rosettacode-kotlin for details) |
(→{{header|Kotlin}}: Updated example see https://github.com/dkandalov/rosettacode-kotlin for details) |
||
Line 1,674: | Line 1,674: | ||
var sb = StringBuilder("") |
var sb = StringBuilder("") |
||
var i1 = noEscape.indexOf('{') |
var i1 = noEscape.indexOf('{') |
||
var i2 = |
var i2 = 0 |
||
outer@ while (i1 != -1) { |
outer@ while (i1 != -1) { |
||
Line 1,682: | Line 1,682: | ||
while (i2 < s.length && depth > 0) { |
while (i2 < s.length && depth > 0) { |
||
val c = noEscape[i2] |
val c = noEscape[i2] |
||
⚫ | |||
depth++ |
if (c == '{') depth++ |
||
else if (c == '}') |
else if (c == '}') depth-- |
||
depth-- |
|||
if (c == ',' && depth == 1) |
if (c == ',' && depth == 1) sb[i2] = '\u0000' |
||
else if (c == '}' && depth == 0 && sb.indexOf("\u0000") != -1) break@outer |
|||
else if (c == '}' && depth == 0 && sb.indexOf("\u0000") != -1) |
|||
break@outer |
|||
i2++ |
i2++ |
||
} |
} |
||
Line 1,695: | Line 1,693: | ||
} |
} |
||
if (i1 == -1) { |
if (i1 == -1) { |
||
if (suf. |
if (suf.isNotEmpty()) expandR(pre + s, suf, "") |
||
else println("$pre$s$suf") |
|||
} else { |
|||
for (m in sb.substring(i1 + 1, i2).split('\u0000')) { |
|||
} |
|||
else { |
|||
for (m in sb.substring(i1 + 1, i2).split('\u0000')) |
|||
expandR(pre + s.substring(0, i1), m, s.substring(i2 + 1) + suf) |
expandR(pre + s.substring(0, i1), m, s.substring(i2 + 1) + suf) |
||
⚫ | |||
} |
} |
||
} |
} |