2016-03-03 68 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)