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可以得到预期的结果。 这是意图还是期待?
答案 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/
最后,如果你不确定它是如何在内部实现的,源代码会告诉你真相并帮助你更清楚地记住它。