2016-09-14 42 views
1

我想迭代一个字符串列表,将它们与后缀/前缀“”连接起来,如果它不是列表的最后一个条目,则在末尾添加一个逗号。Scala/Java模板列表迭代和串联字符串

通缉输出例如:“圈子”,“魔方”,“香蕉”

我的第一次尝试是下面的代码片段:

@listStringifier(list: List[String]) = @{ 
    if (list != null && !list.isEmpty) { 
    for ((string, index) <- list.zipWithIndex){if(index != list.size-1){"string",} 
    else{"string"} 
    } 
    } 
} 

但此功能始终是空的,当我使用@listStringifier任何地方。

在@listStringifier块内记录表明它正在迭代,但没有分配任何东西。

如果我直接在模板调用for循环这样下面的代码片段它的工作原理:

@if (list != null && !list.isEmpty) { 
    for ((string, index) <- list.zipWithIndex){if(index != list.size-1){"@string",} 
    else{"@string"} 
    } 
} 

,但我不想来迭代几次,所以我想将串接的字符串变量之后分配。

任何帮助,将不胜感激, 谢谢提前

回答

3

我觉得mkString可以做你想做的

list.mkString("'" , "','" , "'") 
+0

感谢您提及,这正是我正在寻找的,所以我用双引号替换了单引号,它的工作方式就像一个魅力。像这样:'list.mkString(“\”“,”\“,\”“,”\“”)'谢谢你的帮助 – Yeti

+0

是的,我把单引号不要疯狂的转义序列一个在斯卡拉的方式有替代字符串分隔符像Perl的'q {“,”}'?) – Thilo

+0

我不知道队友,对不起 – Yeti

1

mkString能做到这一点优雅

@listStringifier(list: List[String]) = @{ list mkString("", ",", "") } 

,如果你想引号包围你可以做的字符串

list.map(str => s""""$str"""").mkString(",") 
+0

'(“”“”“”“”“”“”,“”“” ,“”“”“”“)'被要求。 –

+0

感谢提及,我之前尝试过,但不幸的是,这只会将引号附加到第一个和最后一个符号。 – Yeti

+0

@Yeti:您可以将引号添加到分隔逗号以解决该问题。 – Thilo