数组中的速度模板drop元素

时间:2017-02-21 22:11:18

标签: java velocity

我试图在速度模板中删除数组的最后一个元素,然后将它们连接成一个字符串并在下面的" className":键中显示结果:

    #set($elem = '"System.NotImplementedException: Test Exception')
    #set($trace = $elem.replace('"',""))
    #set($tracearray = $trace.split("\."))
    #set($arraysize = $tracearray.size())
    #set($lastelem = $tracearray.size() - 1)
    {
      "className":$tracearray.remove($lastelem).toString(),
      "method":"$tracearray[$lastelem]"
    }#if($foreach.hasNext),#end
    #end
  ]

我尝试了几种不同的方法让数组放弃元素并将它们连接成一个字符串但到目前为止还没有运气。

从上面的示例中,我正在寻找要实现的以下输出。

{
  "className":"System",
  "method":"NotImplementedException: Test Exception"
}

$elem变量将保存各种长度的字符串,并且其中包含不同数量的.以进行拆分,因此数组的长度会有所不同。

1 个答案:

答案 0 :(得分:1)

如果你只需要删除最后一个元素,为什么还要分拆整个字符串呢?你可以做一些解析来提取类名:

#set($elem = '"System.NotImplementedException: Test Exception')                                                                                                                                                 
#set($trace = $elem.replace('"',""))
#set($dot = $trace.lastIndexOf('.'))
#set($className = $trace.substring(0, $dot))
#set($method = $trace.substring($dot + 1))
{
  "className": "$className",
  "method": "$method"
}

或者,为了适应末尾的消息包含点的事实:

#set($elem = '"System.NotImplementedException: Test Exception')                                                                                                                                                 
#set($trace = $elem.replace('"',""))
#set($colon = $trace.indexOf(':'))
#set($dot = $trace.lastIndexOf('.', $colon))
#set($className = $trace.substring(0, $dot))
#set($method = $trace.substring($dot + 1))
{
  "className": "$className",
  "method": "$method"
}

使用您选择的方法,您需要使用其他工具将数组元素与&#39 ;.'连接起来。所有这些都说,如果您碰巧能够使用自定义工具填充Velocity上下文,使用此自定义工具可以更轻松地完成所有这些工作。