在scala中将Long转换为base 36

AKn*_*nox 17 scala base36 long-integer

如何将Long转换为base36?您的回答可以解释您是如何得出答案的?

我已经检查了scaladocs for Long转换为不同的基础,以及将Long转换为BigInt.我看到BigInt确实有toString( base )这样的解决方案可能涉及改变类型,但我无法弄清楚如何.

注意:我是scala/java/type-safe语言的新手,所以我可能会忽略一些微不足道的东西.

cha*_*aro 41

保持Scala语言,转换LongBigInt简单:

var myLong : Long = Long.MaxValue
var myBigInt : BigInt = myLong
myBigInt.toString(36)
Run Code Online (Sandbox Code Playgroud)

输出是:

myLong: Long = 9223372036854775807
myBigInt: scala.math.BigInt = 9223372036854775807
res199: String = 1y2p0ij32e8e7
Run Code Online (Sandbox Code Playgroud)

他们主题是Java开发人员和Scala初学者(阅读"Scala for the Impatient.pdf"的第1章).上面的答案有效但似乎很奇怪.必须跳入Java土地进行这样的基本转换似乎不太正确,特别是当BigInt拥有所有的东西时.在审查了scaladoc和上面的答案之后,一些失败了.

我最大的失败是使用toInt()哪个myLong可怕的截断.即将放弃,最后的尝试似乎如此简单直观,以至于我几乎没有尝试过:myBigInt = myLong.也许有一天Long会更富有,更明白toBigInt......这是我在旅途中的第一次失败.

  • 这是一个更好的答案.日Thnx (2认同)

Jos*_*cus 25

java.lang.Long类有一个静态方法toString(long i,int radix),它将Long转换为另一个base的字符串表示形式."Radix"在这种情况下与"基础"的含义相同.

val myLong = 25000L
val longInBase36:String = java.lang.Long.toString(myLong, 36)
Run Code Online (Sandbox Code Playgroud)

Scala会在必要时将scala Long值视为java.lang.Long,因此您可以在必要时始终在Java API文档中查找方法.请参阅:http://docs.oracle.com/javase/6/docs/api/java/lang/Long.html

  • 所以你知道你必须去 java's Long 吗?我正在尝试在没有 Java 经验的情况下进入 Scala,有时我觉得我不知道在哪里可以找到答案......这是我最终得到的结果:`def hasher(id: Long): String = { java .lang.Long.toString(id, 36) }` 谢谢乔希! (2认同)
  • @ChetanBhasin java.lang.Long.parseLong(String s, int radix) 应该可以解决问题,如果您想将基数中的字符串转换为长数。 (2认同)

小智 8

所以你想把Long转换为BigInt.BigInt对象有一个apply方法,它将Long作为参数.这是REPL中的一个例子.

scala> BigInt(458982948578L).toString(36)
res11: String = 5uuqlhpe
Run Code Online (Sandbox Code Playgroud)


Dan*_*ral 5

好吧,要么该方法可用于Scala Long或其增强类RichLong,或者您必须在Java对应物上搜索它.后者恰好是这种情况.

它可以是源类型或目标类型,因为long它不是Java中的类,所以你必须在它上面查找它java.lang.Long.它没有String- 寻找方法Long- 但你可以找到它java.lang.Long,只是寻找返回String它的方法.