org.apache.commons.lang3.StringUtils.spilt()奇怪的行为

时间:2015-10-20 14:02:02

标签: java split

    String sperator = "__"; // or "_____"
    String[] a = StringUtils.split("A__B_C__D", sperator);
    for (String string :(a) ){
        System.out.println(string);
    }

无论多少" _" sperator有,输出总是

A
B
C
D

然而,java.lang.String.spilt可以得到预期的结果。 这是意图还是期待?

2 个答案:

答案 0 :(得分:3)

这是javadoc所说的。

  

相邻分隔符被视为一个分隔符。

答案 1 :(得分:1)

当我检查API文档时, 它说:

    // Splitting
//-----------------------------------------------------------------------
/**
 * <p>Splits the provided text into an array, using whitespace as the
 * separator.
 * Whitespace is defined by {@link Character#isWhitespace(char)}.</p>
 *
 * <p>The separator is not included in the returned String array.
 * Adjacent separators are treated as one separator.
 * For more control over the split use the StrTokenizer class.</p>
 *
 * <p>A {@code null} input String returns {@code null}.</p>
 *
 * <pre>
 * StringUtils.split(null)       = null
 * StringUtils.split("")         = []
 * StringUtils.split("abc def")  = ["abc", "def"]
 * StringUtils.split("abc  def") = ["abc", "def"]
 * StringUtils.split(" abc ")    = ["abc"]
 * </pre>
 *
 * @param str  the String to parse, may be null
 * @return an array of parsed Strings, {@code null} if null String input
 */
public static String[] split(final String str) {
    return split(str, null, -1);
}

如您所见, &#34;相邻的分隔符被视为一个分隔符。&#34;
演示代码也说实话:

  StringUtils.split("abc def")  = ["abc", "def"]
  StringUtils.split("abc  def") = ["abc", "def"]

有关详情:https://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html

对于java.lang.String.split,第一个参数是&#34;正则表达式&#34;,它是完全匹配的。 有关详细信息,请参阅api doc:

public String[] split(String regex)

围绕给定正则表达式的匹配拆分此字符串。 此方法的作用就像通过调用具有给定表达式和limit参数为零的双参数split方法一样。因此,尾随空字符串不包含在结果数组中。

字符串&#34; boo:和:foo&#34;,例如,使用这些表达式产生以下结果:

正则表达式结果 :{&#34; boo&#34;,&#34;&#34;,&#34; foo&#34; } o {&#34; b&#34;,&#34;&#34;,&#34;:和:f&#34; }

api doc是:http://docs.oracle.com/javase/7/docs/api/

最后,如果你不确定它是如何在内部实现的,源代码会告诉你真相并帮助你更清楚地记住它。