Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java StringTokenizer只考虑五个空格字符,而不考虑其他字符_Java_Guava - Fatal编程技术网

Java StringTokenizer只考虑五个空格字符,而不考虑其他字符

Java StringTokenizer只考虑五个空格字符,而不考虑其他字符,java,guava,Java,Guava,以下是什么意思: 。。。StringTokenizer只尊重五个空格 角色,没有别的 这可能意味着默认情况下,StringTokenizer将在\n、\r、空格、制表符和表单提要上中断。从最简单构造函数的源代码: this(str, " \t\n\r\f", false); 您可以看到这里列出的五个空白字符。不过,这并不是什么大问题,因为您可以使用其他构造函数之一指定自己的分隔符StringTokenizer还有很多其他问题;默认的空白字符集是它最不担心的。我猜这是指字符串标记器的默认分隔符集

以下是什么意思:

。。。StringTokenizer只尊重五个空格 角色,没有别的


这可能意味着默认情况下,
StringTokenizer
将在
\n
\r
、空格、制表符和表单提要上中断。从最简单构造函数的源代码:

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

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

我猜这是指
字符串标记器的默认分隔符集,它们是空格、
\n
\r
\t
\f

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

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


但我认为Guava参数的扩展范围甚至比这一案例中的意外行为更广。Java API通常在定义空白方面极不一致,这就是为什么他们创建了
CharMatcher.whitespace
。请查看Guava作者Kevin Bourrillion编译的所有不同定义,但您可以为
StringTokenizer
@Ernest Friedman Hill指定您的是的,我也这么认为,这误导了我们呵呵:)是的,我可以看出这句话有点误导。也就是说,
StringTokenizer
有一点奇怪,如果你不指定其他内容,它会选择在默认情况下打断这个基本上任意的字符集。StringTokenizer默认给你的只是奇怪。如果你真的想要所有的空白字符racters,你不知道它们的全部(你知道吗?),类似于
Splitter.on(CharMatcher.WHITESPACE)
的东西很方便。@maaartinus——记住
StringTokenizer
存在于JDK1.0中。所有最古老的Java类都是由以前从未用Java编写过的人编写的(当然)这个空白字符列表就是US-ASCII空白字符列表,我相信它在当时是很有意义的:编写ASCII代码在当时是相当标准的程序。它可能来自于其他语言的代码,也许是C语言。