当前位置:  开发笔记 > Android > 正文

tokenize($ s)与tokenize($ s,'')是否相同?

如何解决《tokenize($s)与tokenize($s,'')是否相同?》经验,为你挑选了1个好方法。

https://www.w3.org/TR/xpath-functions/#func-tokenize说明有关的单参数版本tokenize

此函数的单参数形式在空白边界处分割提供的字符串。

然后继续定义或解释

调用fn:tokenize($input)等效于fn:tokenize(fn:normalize-space($input), ' '))在第二个参数是单个空格字符(x20)的情况下调用

但是,当我尝试count(tokenize('1 2 3')), count(tokenize('1 2 3'))使用Saxon或BaseX或XmlPrime时,我得到3 3count(tokenize('1 2 3', ' ')), count(tokenize('1 2 3', ' '))所有这三种实现中的等效功能3 1

因此,这三个实现似乎都与tokenize($s)文字说明所说的一致(“将提供的字符串在空格边界处分割”),但是,如果在字面上传递了一个空格,那么似乎并没有满足规范中给定的fn:tokenize($input)fn:tokenize(fn:normalize-space($input), ' '))仅将单个空格用作分隔符,而不是空白边界。

规范中作为单参数版本的定义给出的等效性是否错误?



1> Michael Kay..:

调用normalize-space()会将换行符替换为x20空格字符。所以,当count(tokenize('1 2 3', ' '))给1时,count(tokenize(normalize-space('1 2 3'), ' '))给3。

换行符和制表符可以用一个更聪明的正则表达式来代替,但是调用的关键normalize-space()是修剪前导和尾随空格。例如tokenize(" red green blue ", "\s+")给出5个令牌,但tokenize(" red green blue ")给出3个。

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有