将java.lang.String转换为Scala字符串

8

我在Scala程序中有一个字符串,想将其转换为整数。

def foo(): Int = x.getTheNumericString().toInt

问题在于x.getTheNumericString()来自Java库,返回一个java.lang.String类型,它没有toInt方法。
我知道我可以使用val s: String = "123"创建Scala字符串,但是我注意到当我像val t = "456"这样创建字符串时,我得到的是java.lang.String我听说Scala字符串只是java.lang.String的包装器,但我还没有找到任何明确的文档说明如何转换为Scala字符串。
是否有一些函数可以使用,例如:
def foo(): Int = f(x.getTheNumericString()).toInt

目前情况是,我的编译器在原始定义中出现了问题:value toInt is not a member of String

3个回答

11

它不是一个包装器,而实际上是java.lang.String。不需要额外麻烦:

» touch 123
» scala
...

val foo = new java.io.File("123")
// java.io.File = 123

// Get name is a java api, which returns Java string

foo.getName.toInt
// res2: Int = 123

1
为了支持这一点,请查看Predef的源代码:https://github.com/scala/scala/blob/v2.11.1/src/library/scala/Predef.scala#L85 - gpampara
1
@ gpampara 这将需要一个额外的注释,说明 type 将在编译时被替换,并且在生成的字节码中不留下任何实际痕迹。 - om-nom-nom
@usmcs 你正在使用哪个版本的Scala? - om-nom-nom
2.10.1 在 Intellij 13.0.1 中 - munk
尝试使用SBT编译它,有时候IDEA编译器会出现一些问题,比如方法丢失,对我来说唯一的真相来源是Scala编译器,当我有疑问时。 - Ende Neu
显示剩余6条评论

4

java.lang.String被隐式地添加了Scala特定的字符串方法,因此不需要手动转换。


0
使用 asInstanceOf[String] 将 Java 字符串语法转换为 Scala 字符串。
val str: String = "java_string".asInstanceOf[String]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接