以下内容是什么意思:
...而StringTokenizer正好尊重五个空格 字符,没有别的。
http://code.google.com/p/guava-libraries/wiki/StringsExplained#Splitter
答案 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。