2016-03-03 60 views
-1

我試圖使用方法分割上串一行:斯卡拉分裂以「/」奇怪的行爲

println("/gg/dsa".split('/').toString) 
println("/gg/dsa".split("/").toString) 

但是這兩種方法打印一些奇怪的事情是這樣的:

[Ljava。 lang.String; @ 6ac7c6cc

但正如我所用的例子,參見http://alvinalexander.com/scala/scala-split-string-example這應該打印陣列數據。 我在這裏錯過了什麼?

+0

的可能的複製[什麼是打印的Java數組的最簡單的方法?(http://stackoverflow.com/questions/409784/whats-最簡單的方法來打印一個java數組) – marcospereira

+0

@marcospereira好吧,分裂在斯卡拉返回Scala數組,它是不明顯的新來者,它實際上使用Java數組與其他Scala集合的toString行爲不同如列表,地圖等 – user2975535

回答

1

這是定義爲java.lang.Object#toString

public String toString() { 
    return getClass().getName() + "@" + Integer.toHexString(hashCode()); 
} 

java.lang.Array直接從java.lang.Object繼承沒有覆蓋toString回到更合適的東西,從而導致輸出你越來越。你可以做的是調用.mkString(", ")在Scala中創建結果字符串:

println("/gg/dsa".split("/").mkString(", "))

這會導致類似的輸出:

, gg, dsa

0

它將您將其轉換爲字符串的字符串代表將被打印。現在,如果你想美化數組只是做:

println("/gg/dsa".split('/').deep.mkString("\n")) 
1

你有一些選項來做到這一點:

如前所述:

println("/gg/dsa".split('/').mkString(", ")) 

將打印:

,GG,DSA

具有相同輸出一個有效的替代可以是:

"/gg/dsa".split('/').foreach(print) 

另一替代:

runtime.ScalaRunTime.stringOf("/gg/dsa".split('/')) 

與輸出:

陣列( 「」,GG,DSA)