【问题标题】:Scala/Java template list iteration and concatenation of stringScala / Java模板列表迭代和字符串连接
【发布时间】:2016-09-14 17:30:20
【问题描述】:

我想遍历一个字符串列表,将它们与后缀/前缀“”连接起来,如果它不是列表的最后一个条目,则在末尾附加一个逗号。

想要的输出示例:"circle","cube","banana"

我的第一次尝试是以下sn-p:

@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 循环,如下 sn-p 它可以工作:

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

但我不想迭代多次,所以我想在之后将连接的字符串分配给一个变量。

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

【问题讨论】:

    标签: java scala playframework-2.5 scala-template


    【解决方案1】:

    我认为mkString可以为所欲为

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

    【讨论】:

    • 感谢您的提及,这正是我正在寻找的,所以我用双引号替换了单引号,它就像一个魅力。像这样:list.mkString( "\"" , "\",\"" , "\"" )谢谢你的帮助
    • 是的,我在转义序列上加上了单引号(Scala 中有没有办法使用像 Perl 的 q{","} 这样的替代字符串分隔符?)
    • 我不知道伙计,对不起
    【解决方案2】:

    mkString 可以优雅地做到这一点

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

    如果你想在字符串周围加上引号,你可以这样做

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

    【讨论】:

    • (""""""", """" ,"""", """"""") 已请求。
    • 感谢提及,我之前尝试过,但不幸的是,这只会将引号附加到第一个和最后一个符号。
    • @Yeti:您也可以将引号添加到分隔逗号以解决此问题。
    • @Thilo 正如您在回答中提到的那样,它现在可以工作了,谢谢大家的帮助。我不能将两个答案都标记为正确,实际上它们是从语法的角度来看的
    猜你喜欢
    • 2010-10-18
    • 2018-07-25
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2018-05-15
    相关资源
    最近更新 更多