Freemarker:truncate_c 未按预期工作

问题描述 投票:0回答:1

根据文档

truncate_c
应在任何给定位置截断文本:

truncate_c 将截断任何字符,而不仅仅是字尾。为了 例如,longName?truncate_c(16) 返回“This is a t[...]”,而不是 而不是“这是一个 [...]”(如前面的示例所示)。这往往会给 字符串长度更接近指定的长度,但仍然不是精确的 长度,因为它删除了终止符字符串之前的空格,并且 如果我们刚好在单词末尾等处,则重新添加空格。

但在以下情况下它无法按预期工作: 所以我想截断的字符串是

1234 SOMESTREETSSS AVE NE 123
所以代码如下

<#assign myField = "1234 SOMESTREETSSS AVE NE 123">
${myField?truncate_c(25, '')}

预期输出是

1234 SOMESTREETSSS AVE NE
实际输出是
1234 SOMESTREETSSS AVE N

我认为这是一个错误,或者我遗漏了一些东西。

截断文档的链接

java freemarker
1个回答
1
投票

是的,这是一个错误。肯定会在 2.3.33 修复它。在此之前,您可以使用

truncate_builtin_algorithm
配置设置提供固定算法作为解决方法。

更新:阅读文档,发现这些实际上是预期的结果,但如果你的终止符字符串是

''
,则相当反直觉。为了改进这一点,现在如果终止符长度为 0,2.3.33 不再在终止符字符串之前添加分隔符空格(通常我们会添加,如果 cut 位于单词边界上)。但是,它仍然在切割时修剪。我怀疑你想要的实际上是
myField[0 ..* 25]
,因为这并没有任何技巧可以使输出对人类读者来说更好。

© www.soinside.com 2019 - 2024. All rights reserved.