以下は、grooyshシェルで実行した一連の手順で問題を示しています
String.split()
=> String[]
JavaSDKで期待どおり。:私は、継続的な表現の一部としてこれを評価するとchangedDirs.split('\r\n').collect{ ... }
、私のcollect
実行は空で1時間it
。許可させてください。このコードはJenkinsサーバーで実行されており、Jenkinsは、たとえば、グルーヴィーな方言を実行していることが知られています。:私はgroovyshでローカルにそれをテストする場合でも、かかわらず、私は確かに私は期待していなかった何かを得る[]
に評価しtruthy
た場合、それはから来ているのString.split()
だから:誰かが説明できますか:
truthy
のためString.split()
ではなく、基本的な空のために[]
groovy:000> [] ? 'true' : 'false'
===> false
groovy:000> changedDirs = ''
===>
groovy:000> changedDirs.split('\r\n')
===> []
groovy:000> changedDirs.split('\r\n') ? true : false
===> true
groovy:000> result = changedDirs.split('\r\n')
===> []
groovy:000> result ? true : false
===> true
groovy:000> result.class
===> class [Ljava.lang.String;
groovy:000> [] as String[] ? true : false
===> false
groovy:000>
result
評価true
するブールとして、ためにchangedDirs.split('\r\n')
生成するString[]
空の文字列-単一の要素を持つ配列を。次の例を見てください。
groovy:000> ([] as String[]).class
===> class [Ljava.lang.String;
groovy:000> ([] as String[]) ? true : false
===> false
groovy:000> x = ([] as String[])
===> []
groovy:000> x.dump()
===> <[Ljava.lang.String;@5c41d037>
groovy:000> y = "".split(",")
===> []
groovy:000> y.class
===> class [Ljava.lang.String;
groovy:000> y.dump()
===> <[Ljava.lang.String;@79a1728c>
groovy:000> y ? true : false
===> true
groovy:000> y.length
===> 1
groovy:000> x.length
===> 0
groovy:000> y[0].dump()
===> <java.lang.String@0 value= hash=0>
groovy:000>
「GroovyTruth」では、配列内の要素の値に関係なく、空でない配列はすべて、メソッドをtrue
呼び出すときに評価されasBoolean()
ます。
次のJavaコード例を見るとString.split(pattern)
、空の文字列の場合にメソッドが単一の要素配列を生成することがわかります。
final class Test {
public static void main(String[] args) {
String[] array = "".split("\r\n");
System.out.println(array.length); // prints: 1
}
}
このSOの質問は役立つかもしれません-空の文字列の「分割」が空でない配列を返すのはなぜですか?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加