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