java - 在 Java/Scala 中将字节数组转换为字符串时修剪字节数组

标签 java string scala bytearray

使用 ByteBuffer,我可以将字符串转换为字节数组:

val x = ByteBuffer.allocate(10).put("Hello".getBytes()).array()
> Array[Byte] = Array(104, 101, 108, 108, 111, 0, 0, 0, 0, 0)

将字节数组转换为字符串时,我可以使用new String(x)。 但是,字符串变成了 hello??????,我需要在将字节数组转换为字符串之前缩减字节数组。我怎样才能做到这一点?

我使用这段代码来减少零,但我想知道是否有更简单的方法。

def byteArrayToString(x: Array[Byte]) = {
    val loc = x.indexOf(0)
    if (-1 == loc)
      new String(x)
    else if (0 == loc)
      ""
    else
      new String(x.slice(0,loc))
}

最佳答案

假设 0: Byte 是尾随值,则

implicit class RichToString(val x: java.nio.ByteBuffer) extends AnyVal {
  def byteArrayToString() = new String( x.array.takeWhile(_ != 0), "UTF-8" )
}

因此

val x = ByteBuffer.allocate(10).put("Hello".getBytes())

x.byteArrayToString
res: String = Hello

关于java - 在 Java/Scala 中将字节数组转换为字符串时修剪字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23976309/

相关文章:

string - 将字符代码 append 到字符串

java - 为什么 ScheduledThreadPoolExecutor 的队列大小始终为 0?

java - 对 Flex 中现有应用程序实现基于角色的授权的建议

java - Android 计算器给出错误答案

sql - 如何处理SQL中的日期转换错误?

scala - 调试表达式求值

scala - 诊断 Scala 编译错误 "value to is not a member of Int"

Java Pelops 和 Cassandra NoSQL DB : Can I Batch Delete Rows?

java - 内存不足会不会导致NoSuchMethodError?

string - 从 Linq 到 String 的转换