Java 速度模板从阵列中删除元素
我试图在将velocity模板中的数组的最后一个元素合并成字符串并在下面的“className”:键中显示结果之前,将其删除:Java 速度模板从阵列中删除元素,java,velocity,Java,Velocity,我试图在将velocity模板中的数组的最后一个元素合并成字符串并在下面的“className”:键中显示结果之前,将其删除: #set($elem = '"System.NotImplementedException: Test Exception') #set($trace = $elem.replace('"',"")) #set($tracearray = $trace.split("\.")) #set($arraysize = $tracearray.
#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
变量将包含不同长度的字符串,其中包含不同数量的
,以便拆分,因此数组的长度将有所不同。如果只需要删除最后一个元素,为什么还要拆分整个字符串?您只需进行一些解析即可提取类名:
#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"
}
使用您选择的方法,您将需要另一个工具将数组元素与“.”连接起来。综上所述,如果您碰巧能够使用自定义工具填充Velocity上下文,那么使用此自定义工具可以更轻松地完成所有这些工作。谢谢Claude,这对我很有用。不幸的是,我无法在velocity模板之外执行任何操作,因为这是通过AWSAPI网关完成的,所以我只能从模板本身内部执行所有数据操作。