Velocity模板中如何对两个字符串进行字典序比较?
在Velocity中实现字符串字典序比较
嘿,我来帮你搞定这个问题!Velocity里的字符串本质上就是Java的String对象,所以咱们直接用Java String类自带的compareTo()方法就能完美解决字典序比较的需求,这也是最靠谱的方式。
先给你说下compareTo()的返回规则,方便你理解逻辑:
- 返回正数:说明调用方法的字符串(比如$string1)比参数里的字符串($string2)字典序更大
- 返回0:两个字符串完全相等
- 返回负数:调用方法的字符串字典序更小
针对你的场景,$string1是"dog"、$string2是"cat",直接这么写就能得到正确的$largest:
#set($largest = "") #if($string1.compareTo($string2) > 0) #set($largest = $string1) #elseif($string2.compareTo($string1) > 0) #set($largest = $string2) #else #set($largest = $string1) # 俩字符串相等,随便赋值哪个都行 #end
为啥之前会报错?
估计你之前可能尝试直接用>或者<来比较字符串(比如#if($string1 > $string2))——这可不行!Velocity看到这种符号会默认把变量当成数值来处理,字符串没法转成数值,自然就报错了。所以一定要用compareTo()来做字符串的字典序对比哦。
额外小技巧:忽略大小写的比较
如果需要忽略大小写的字典序对比,直接换成compareToIgnoreCase()方法就行,用法和上面完全一样,比如"Dog"和"cat"对比时会忽略大小写差异,结果会认为"cat"更小。
内容的提问来源于stack exchange,提问作者rlandster
相关产品推荐
相关产品推荐

