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)
在不使用 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