使用velocity split()将字符串拆分为数组似乎不起作用

时间:2014-01-22 16:36:44

标签: arrays apache split velocity

我讨厌速度并且很少使用它,但有时我会在工作中被要求这样做。我永远无法弄清楚如何使用它。

我有这个

#foreach( $product in $browseSiteProducts )
    alert("$product.productId");
    #foreach( $stringList in $product.productId.split("|") )
        alert("inner loop");
    #end
#end

$ browseSiteProducts是一个数组。或列表。管他呢。我甚至不知道。 productId的第一个警报工作正常。我得到“|”这是打印出来时的预期。然后内循环应该拆分为“|”作为分隔符,并给我“内循环”的警报。但我总是得到24个警报,因为productId中有24个字符。所以split()没有正确地为我划界。我到底做错了什么?

由于 凯尔

5 个答案:

答案 0 :(得分:14)

Velocity拥有极少的对象和方法。相反,它允许您使用真正的Java对象并在这些对象上调用真正的Java方法。哪个Velocity文档说分隔符是一个字符串?

此外,由于Velocity是基于Java的,string只是一种可以容纳多种类型信息的数据类型:电话号码,名称,标识符,正则表达式......在Java中,有很多方法可以处理正则表达式将这些RE作为String个对象传递。

您可以通过打印其类名来检查变量后面的值的实际类型:

Product class is $product.class
Product ID class is $product.productId.class

如果产品ID确实是java.lang.String,那么您可以检查the split method是否采用String参数,但该字符串应该是有效的正则表达式。

| is a special character in regular expressions开始,你需要以某种方式逃避它。这有效:

#foreach( $stringList in $product.productId.split("[|]") )

答案 1 :(得分:4)

不使用StringUtils,可以使用String split()方法完成此操作。

与特殊字符的Java对应物不同,不需要像@kamcknig正确声明的那样转义正斜杠(.e.g "\\|"):

#set ($myString = “This|is|my|dummy|text”) 

#set ($myArray = $myString.split("\|")) or
#set ($myArray = $myString.split('\|')) or
#set ($myArray = $myString.split("[|]"))

注1:要获得数组的大小,请使用:$myArray.size()

注意2:要获取实际值,请使用$myArray.get(0)$myArray[0] ...等

建议:可以预先使用 #if ($myString.indexOf(‘|’)) ... #end

答案 2 :(得分:1)

## Splitting by Pipes
#set($prodId = $product.productId)
#foreach($id in $prodId.split("[|]"))
$id
#end

答案 3 :(得分:0)

在vtl脚本中溢出字符串::

foreach($ yourString.split(',')中的$ subString)

{        “ $ subString”  }  #if($ foreach.hasNext),#end

结束enter code here

enter image description here

答案 4 :(得分:-1)

显然即使速度文档说分隔符是一个字符串,它实际上是一个正则表达式。谢谢apache。

正确的方法是

$product.product.split("\|");