Brace expansion: Difference between revisions

Content deleted Content added
PureFox (talk | contribs)
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.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.""",