Scala与" /"分开奇怪的行为

时间:2016-03-03 08:55:29

标签: scala

我试图在字符串行上使用方法拆分,如下所示:

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

但这两种方法都会打印出类似这样的奇怪内容:

  

[Ljava.lang.String; @ 6ac7c6cc

但正如我在示例http://alvinalexander.com/scala/scala-split-string-example中所看到的,这应该打印数组数据。 我在这里错过了什么?

3 个答案:

答案 0 :(得分:1)

这是java.lang.Object#toString的定义:

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

java.lang.Array直接从java.lang.Object继承,但不会覆盖toString以返回更合适的内容,从而产生您获得的输出。您可以做的是在Scala中调用.mkString(", ")来创建结果字符串:

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

这将产生如下输出:

, gg, dsa

答案 1 :(得分:1)

你有一些选择:

如前所述:

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

将打印:

  

,gg,dsa

具有相同输出的有效替代方案可以是:

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

另一种选择:

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

输出:

  

数组("",gg,dsa)

答案 2 :(得分:0)

它的原因是您将其转换为字符串,表示字符串表示。现在,如果你想要对数组进行美化,那就行了:

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