Velocity Engine split() returns 字符串而不是数组

Velocity Engine split() returns String instead of Array

我正在使用 mvn archetype:generate 来模板化我项目中的一些内容。我 运行 在使用 Maven 3.2.2 Velocity Engine split() 方法时遇到了一些麻烦。我一直无法弄清楚具体使用的是哪个版本的 Velocity Maven。

#set($foo = "one:a, two:b, three:c")
$!foo
$foo.split(",")

#foreach($bar in $foo.split(","))
    $!bar
    $bar.split(":")

    #set($number = $bar.split(":").get(0))
    number = $!number

    #set($letter = $bar.split(":").get(1))
    letter = $!letter
#end

预期输出:

one:a, two:b, three:c
['one:a', 'two:b', 'three:c']

one:a
['one', 'a']
number = one
letter = a

two:b
...

实际输出:

one:a, two:b, three:c
[Ljava.lang.String;@6cff380

one:a
[Ljava.lang.String;@5a587f23
number =
letter = 

two:b
[Ljava.lang.String;@2c8b586a
...

如您所见,#foreach 块中使用的第一个 split() 工作方式与我预期的一样,用逗号拆分字符串并遍历三个子字符串,但是当我打印 $bar.split(": ") 我得到了那个奇怪的字符串指针,并且 #set($number = $bar.split(":").get(0)) 什么都不打印,因为 .get() 是在字符串而不是数组上调用的。考虑到这一点,我想出了这个可怕的技巧:

#foreach ($bar in $foo.split(","))
    #set ($i = 0)
    #foreach($hack in $bar.split(":"))
        #if($i == 0)
            #set ($number = $hack)
        #else
            #set ($letter = $hack)
        #end
        #set($i = $i + 1)
    #end
number = $number
letter = $letter
#end

但必须有更好的方法,我不能凭良心使用这段代码。我一直在使用 Velocity 总共 3 个小时,所以我肯定要为此负责,#foreach 知道什么我不知道?

感谢您的帮助。

编辑:根据 this maven 原型正在使用 Velocity Engine 1.5

[Ljava.lang.String;@6cff380 不是一个字符串引用,它是一个字符串数组引用,所以到目前为止,一切都是正常的(除了 Velocity 可以格式化数组而不是输出它的 toString() 方法)。

然后,当你在一个数组上调用 get(i) 时,你什么也得不到,而从 Velocity 1.6 开始你 应该 得到你想要的,那就是个元素。我只是猜想你的 Velocity 版本太旧了...