3

以下是什么意思:

...并且 StringTokenizer 仅尊重五个空白字符,仅此而已。

http://code.google.com/p/guava-libraries/wiki/StringsExplained#Splitter

4

4 回答 4

9

大概这意味着默认情况下StringTokenizer会在\n, \r, space, TAB 和 formfeed 上中断。从最简单的构造函数的源代码:

this(str, " \t\n\r\f", false);

您会看到那里列出的五个空白字符。不过,这并不是什么大问题,因为您可以使用其他构造函数之一指定自己的分隔符。StringTokenizer还有很多其他问题;默认的空白字符集是最不用担心的。

于 2012-05-24T03:06:21.210 回答
5

我猜这是指 a 的默认分隔符集StringTokenizer,它们是空格、\n、和.\r\t\f

于 2012-05-24T03:07:12.687 回答
4

我认为这里更重要的一点是 Java API 在其中一些字符串问题上的意外行为,尤其是关于空格和拆分的问题。默认StringTokenizer使用空格作为分隔符,但在一个非常独特的空格定义下(例如,Java API 中的每个其他定义似乎都包括行制表,而默认StringTokenizer才不是。在最终意识到,哎呀,这是一个不间断的空间,在整个网络上广泛使用之前,人们可能会合理地混淆为什么从用户传入的字符串确实有空格,但没有被拆分。是的,如果您仔细检查请求,您会发现这一点,如果您深入研究 Javadoc,您会发现这是默认行为,是的,您可以在构造时指定一组不同的字符你的StringTokenizer,但这并没有让它不那么烦人。

但我认为在这种情况下,番石榴论点的扩展范围甚至比意外行为还要广泛。一般来说,Java API 在定义空格的方式上完全不一致,这就是他们创建CharMatcher.WHITESPACE. 在这里查看所有不同的定义,由 Guava 作者 Kevin Bourrillion 编译

于 2012-05-24T11:30:50.080 回答
1

我假设它们所指的“五个空白字符”是:空格、\t、\r、\n 和 \f。

于 2012-05-24T03:12:56.917 回答