Java StringTokenizer正好尊重五个空白字符,而不是其他任何东西

时间:2012-05-24 03:03:28

标签: java guava

以下内容是什么意思:

  

...而StringTokenizer正好尊重五个空格   字符,没有别的。

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

4 个答案:

答案 0 :(得分:9)

据推测,这意味着StringTokenizer默认会在\n\r,空格,TAB和换页符上中断。从最简单的构造函数的源:

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

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

答案 1 :(得分:5)

我猜这是指StringTokenizer的默认分隔符集,即空格\n\r\t\f

答案 2 :(得分:4)

我认为这里提出的更大一点是Java API中某些String问题的意外行为,尤其是关于空格和拆分的问题。默认的StringTokenizer使用空格作为分隔符,但是在空白的非常独特的定义下(例如,Java API中的每个其他定义似乎都包括行列表,而默认的StringTokenizer则没有。合理地混淆为什么从用户传入的字符串真正具有空格,但没有被拆分,在最终意识到,oops之前,它是一个不间断的空间,在网络上广泛使用。是的,如果你检查请求密切关注,你会发现这一点,如果你深入研究Javadoc,你会发现这是默认行为,是的,你可以在构造{{1}时指定一组不同的字符。但是,这并不会让它变得不那么烦人。

但我认为,在这种情况下,番石榴争论的扩展范围比意外行为更广泛。 Java API通常在定义空格的方式上非常不一致,这就是他们创建StringTokenizer的原因。查看由Guava作者Kevin Bourrillion编译的所有不同定义here

答案 3 :(得分:1)

我假设他们引用的“五个空格字符”是:space,\ t,\ r,\ n和\ f。