【问题标题】:Unable to access String value无法访问字符串值
【发布时间】:2014-07-25 13:17:42
【问题描述】:

为什么无法访问字符串值?

我希望 s1 是“a”,而不是它的 Ljava.lang.String;@d70d7a ?

 val it = Iterator("(a,((a,b),1.0))")             //> it  : Iterator[String] = non-empty iterator

 val s1 = it.next.replace("(" , "").replace(")" , "").split(",").toString.split(",")
                                                  //> s1  : Array[String] = Array([Ljava.lang.String;@d70d7a)
 println("s1 is "+s1(0))                          //> s1 is [Ljava.lang.String;@d70d7a

【问题讨论】:

  • 您可能想要mkString(",") 而不是toString。数组上的toString 会产生丑陋的[Ljava.lang.String;@d70d7a

标签: string scala collections scala-collections


【解决方案1】:

让我们逐个命令:

val it = Iterator("(a,((a,b),1.0))")
// here we got iterator on one String

val s1 = it.next // "(a,((a,b),1.0))"
        .replace("(" , "") // "a,a,b),1.0))"
        .replace(")" , "") // "a,a,b,1.0"
        .split(",") // multiple lines in array: "a", "a","b","1.0"
        .toString // Array[String].toString returns what you got: Ljava.lang.String;@d70d7a
        .split(",") // one String (because there's no "," signs)

也许您应该在toString 之前运行toList,因为toString 的定义方式是您期望在List 的实现中定义的:

val s1 = ...
        .split(",")
        .toList
        .toString
        ...

也许您应该查看Java: split() returns [Ljava.lang.String;@186d4c1], why? 以进行澄清。

【讨论】:

  • 我不会说 它的定义是正确的 -- Array 对 .toString 的定义是完全正确的,它只是不是你期望看到的。
  • @om-nom-nom,我会以某种方式修复答案
【解决方案2】:

.split(",") 使 Array 和 .toString 在 Array 上不起作用,之后您再次被 .split(",") 拆分 我认为这没有帮助。

您还可以使用replaceAll 代替多个replace

scala>  val it = Iterator("(a,((a,b),1.0))")         
it: Iterator[String] = non-empty iterator

scala>  val s1 = it.next.replaceAll("[()]" , "").split(",")
s1: Array[String] = Array(a, a, b, 1.0)

scala> println("s1 is "+s1(0))    
s1 is a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 2019-05-28
    • 2018-07-19
    相关资源
    最近更新 更多