Brace expansion: Difference between revisions
Content deleted Content added
Added Kotlin |
→{{header|Kotlin}}: Updated example see https://github.com/dkandalov/rosettacode-kotlin for details |
||
Line 1,663: | Line 1,663: | ||
=={{header|Kotlin}}== |
=={{header|Kotlin}}== |
||
{{trans|Java}} |
{{trans|Java}} |
||
<lang scala>// version 1.1. |
<lang scala>// version 1.1.2 |
||
object BraceExpansion { |
object BraceExpansion { |
||
Line 1,669: | Line 1,669: | ||
private val r = Regex("""([\\]{2}|[\\][,}{])""") |
private val r = Regex("""([\\]{2}|[\\][,}{])""") |
||
private fun expandR(pre: String, s: String, suf: String) { |
private fun expandR(pre: String, s: String, suf: String) { |
||
val noEscape = s.replace(r, " ") |
val noEscape = s.replace(r, " ") |
||
var sb = StringBuilder("") |
var sb = StringBuilder("") |
||
var i1 = noEscape.indexOf('{') |
var i1 = noEscape.indexOf('{') |
||
var i2 = 0 |
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] |
||
if (c == '{') |
if (c == '{') |
||
depth++ |
depth++ |
||
else if (c == '}') |
else if (c == '}') |
||
depth-- |
depth-- |
||
if (c == ',' && depth == 1) |
if (c == ',' && depth == 1) |
||
sb[i2] = '\u0000' |
sb[i2] = '\u0000' |
||
else if (c == '}' && depth == 0 && sb.indexOf("\u0000") != -1) |
else if (c == '}' && depth == 0 && sb.indexOf("\u0000") != -1) |
||
Line 1,693: | Line 1,693: | ||
} |
} |
||
i1 = noEscape.indexOf('{', i1 + 1) |
i1 = noEscape.indexOf('{', i1 + 1) |
||
} |
} |
||
if (i1 == -1) { |
if (i1 == -1) { |
||
if (suf.length > 0) |
if (suf.length > 0) |
||
Line 1,699: | Line 1,699: | ||
else |
else |
||
println("$pre$s$suf") |
println("$pre$s$suf") |
||
} |
} |
||
else { |
else { |
||
for (m in sb.substring(i1 + 1, i2).split('\u0000')) |
for (m in sb.substring(i1 + 1, i2).split('\u0000')) |
||
Line 1,708: | Line 1,708: | ||
fun main(args: Array<String>) { |
fun main(args: Array<String>) { |
||
val strings = arrayOf( |
val strings = arrayOf( |
||
"""~/{Downloads,Pictures}/*.{jpg,gif,png}""", |
"""~/{Downloads,Pictures}/*.{jpg,gif,png}""", |
||
"""It{{em,alic}iz,erat}e{d,}, please.""", |
"""It{{em,alic}iz,erat}e{d,}, please.""", |