如果您有此代码:
"......".Split(new String[]{"...", ".."}, StringSplitOptions.None);
结果数组元素是:
1. ""
2. ""
3. ""
现在如果你颠倒分隔符的顺序,
"......".Split(new String[]{"..", "..."}, StringSplitOptions.None);
结果数组元素是:
1. ""
2. ""
3. ""
4. ""
从这两个示例中,我倾向于得出结论,Split 方法在从左到右遍历数组的每个元素时递归地进行标记。
但是,一旦我们将包含字母数字字符的分隔符放入等式中,很明显上述理论是错误的。
"5.x.7".Split(new String[]{".x", "x."}, StringSplitOptions.None)
结果是:1. "5" 2. ".7"
"5.x.7".Split(new String[]{"x.", ".x"}, StringSplitOptions.None)
结果是:1. "5" 2. ".7"
这次我们获得了相同的输出,这意味着基于第一组示例理论化的规则不再适用。(即:如果分隔符的优先级始终根据数组中分隔符的位置确定,那么在最后一个示例中,我们将获得"5."
&"7"
而不是"5"
& ".7"
。
至于为什么我浪费时间试图猜测 .NET 标准 API 的工作原理,这是因为我想为我的 java 应用程序实现类似的功能,但是 StringTokenizer 和 org.apache.commons.lang.StringUtils 都没有提供拆分一个使用多个多字符分隔符的字符串(即使我要找到确实提供此功能的 API,也很难知道它是否总是使用 String.Split 方法使用的相同算法进行标记。