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

kam*_*nig 12 apache arrays split velocity

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

我有这个

#foreach( $product in $browseSiteProducts )
    alert("$product.productId");
    #foreach( $stringList in $product.productId.split("|") )
        alert("inner loop");
    #end
#end
Run Code Online (Sandbox Code Playgroud)

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

谢谢凯尔

Ser*_*riu 14

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

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

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

Product class is $product.class
Product ID class is $product.productId.class
Run Code Online (Sandbox Code Playgroud)

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

因为|在正则表达式中是一个特殊字符,所以你需要以某种方式逃避它.这有效:

#foreach( $stringList in $product.productId.split("[|]") )
Run Code Online (Sandbox Code Playgroud)


Ith*_*har 7

在不使用 StringUtils 的情况下,这可以使用 Stringsplit()方法来完成。

与 Java 对应的特殊字符不同,"\\|"正如@kamcknig 正确指出的那样,不需要对正斜杠(.eg )进行转义:

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

#set ($myArray = $myString.split("\|")) or
#set ($myArray = $myString.split('\|')) or
#set ($myArray = $myString.split("[|]"))
Run Code Online (Sandbox Code Playgroud)

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

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

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