以下是什么意思:
...并且 StringTokenizer 仅尊重五个空白字符,仅此而已。
http://code.google.com/p/guava-libraries/wiki/StringsExplained#Splitter
以下是什么意思:
...并且 StringTokenizer 仅尊重五个空白字符,仅此而已。
http://code.google.com/p/guava-libraries/wiki/StringsExplained#Splitter
大概这意味着默认情况下StringTokenizer
会在\n
, \r
, space, TAB 和 formfeed 上中断。从最简单的构造函数的源代码:
this(str, " \t\n\r\f", false);
您会看到那里列出的五个空白字符。不过,这并不是什么大问题,因为您可以使用其他构造函数之一指定自己的分隔符。StringTokenizer
还有很多其他问题;默认的空白字符集是最不用担心的。
我猜这是指 a 的默认分隔符集StringTokenizer
,它们是空格、\n
、和.\r
\t
\f
我认为这里更重要的一点是 Java API 在其中一些字符串问题上的意外行为,尤其是关于空格和拆分的问题。默认StringTokenizer
使用空格作为分隔符,但在一个非常独特的空格定义下(例如,Java API 中的每个其他定义似乎都包括行制表,而默认StringTokenizer
才不是。在最终意识到,哎呀,这是一个不间断的空间,在整个网络上广泛使用之前,人们可能会合理地混淆为什么从用户传入的字符串确实有空格,但没有被拆分。是的,如果您仔细检查请求,您会发现这一点,如果您深入研究 Javadoc,您会发现这是默认行为,是的,您可以在构造时指定一组不同的字符你的StringTokenizer
,但这并没有让它不那么烦人。
但我认为在这种情况下,番石榴论点的扩展范围甚至比意外行为还要广泛。一般来说,Java API 在定义空格的方式上完全不一致,这就是他们创建CharMatcher.WHITESPACE
. 在这里查看所有不同的定义,由 Guava 作者 Kevin Bourrillion 编译
我假设它们所指的“五个空白字符”是:空格、\t、\r、\n 和 \f。