通过速度中的字符串迭代

时间:2012-12-18 20:15:25

标签: java string iterator velocity

我乍看之下是一项相当微不足道的任务,但在一天之内,我没有成功地以某种方式进步。我需要在速度模板中处理一个字符串。 字符串有这样的视图:

    Maj - [at552] - asdfghjkksfgh <br /> Avg - [at553] - asdfghjkksfgh <br /> etc

我需要用以下文字替换[]符号中的文字:

    <a href="http://someaddress/at522">at522</a> (at522 is specific for 
    each [ ] block)

我尝试了很多方法,但没有一个工作,所以我甚至不知道我可以在这里发布什么代码片段。一个重要的细节是我无法访问应用程序的java部分,只能访问传递给velocity模板的对象。我不能使用JavaScript,因为这是一个电子邮件模板。我非常感谢你的每一条建议。

UPDATE 这是第一次出现[]

的代码
#set ($scopeComment = $issue.getCustomFieldValue("customfield_10201").replaceAll("\n", "<br />"))
#set ($start = $scopeComment.indexOf("["))
#set ($end = $scopeComment.indexOf("]"))
#set ($substr = $scopeComment.substring($start, $end))
#set ($scopeComment = $scopeComment.replace($substr, "<a href=\"localhost/$substr\">$substr</a>"))

但我不能让它在所有[]块的循环中工作 这是我正在尝试的方法之一

#foreach ($index in [0..$scopeComment.length()])
    #set($nextIndex = $index.index+1)
    #set($curChar = $scopeComment.substring($index.index, $nextIndex))
    #if ($curChar.equals("["))
        #set ($start = $count+1)
        #set ($end = $scopeComment.indexOf("]", count))
        #set ($sub = $scopeComment.substring($start, $end))
        $sub <br/>
    #end
#end

2 个答案:

答案 0 :(得分:2)

在这种情况下,RegExp将起作用:

#set ($var = $var.replaceAll('\[([a-z0-9]*)\]', '<a href="http://someaddress/$1">$1</a>'))

请注意,我使用了单个引号和单个反斜杠。与Java不同,当使用双引号或单引号时,Velocity的行为会有所不同。

您的代码中存在许多错误。例如,$index.index应该是什么? $index是一个整数,因此您只需在支票中使用$index即可。此外,您使用的是$count,但未在任何地方定义,您也可能意味着$index

答案 1 :(得分:0)

试试regexp:

#set($var= $var.replaceAll("\\[([a-z0-9]*)\\]", "<a href="http://someaddress/$1">$1</a>"))

Working regexp example